我是节点和表达的新手,我有一个关于使用mysql的问题.我有一个登录到'/ login'的登录表单.我使用node-mysql模块.
app.get('/site', function(req, res){ if (req.session.is_logged_in === true) { res.render('site/start', { title: 'News' }); } else { res.redirect('/'); } }); app.post('/login', function(req, res){ client.query('SELECT id, user_name FROM user WHERE email="' + req.body.login + '" AND password="' + Hash.sha1(req.body.password) + '"', function (err, results, fields) { if (err) { throw err; } if (results[0]) { req.session.userInfo = results[0]; req.session.is_logged_in = true; res.render('site/start', { title: 'News' }); } else { res.redirect('/'); } } ); });
这是一个很好的方法吗?我可以继续这样吗?并且sql查询是以某种方式逃脱的,还是我必须自己编写该功能?
最后一个问题:我重写一个网站,我使用了mysql数据库.将它改成mongodb有什么好处吗?
任何帮助,将不胜感激
提前致谢
乔治
node-mysql客户端对象有一个可以帮助解决这个问题的转义方法.您可以手动调用,也可以使用接受参数的查询形式.例如:
client.query('SELECT id, user_name FROM user WHERE email=?', [req.body.login], ...
注意使用参数方法实际上并没有向mysql提交参数化查询,它只是为您处理参数替换和转义.
顺便说一句,这是逃脱的作用:
https://github.com/felixge/node-mysql/blob/master/lib/protocol/SqlString.js#L3
这是一个很好的方法吗?我可以继续这样吗?并且sql查询是以某种方式逃脱的,还是我必须自己编写该功能?
您应该首先清理SQL查询参数.例如,通过利用node-validator模块的功能来防止SQL注入攻击.
我正在重写一个站点,我使用了mysql db.将它改成mongodb有什么好处吗?
一般来说,这取决于您的网站的功能和其他东西.试着看看这个问题.
如果您的网站变得更加复杂,您可能有兴趣将ORM用于MySQL.Sequelize使用node-mysql lib并管理完整的sql内容:http://sequelizejs.com