我是节点和表达的新手,我有一个问题 使用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 db。在那儿 将它改成mongodb有什么好处?
任何帮助将不胜感激
提前致谢
乔治
答案 0 :(得分:14)
node-mysql客户端对象有一个可以帮助解决这个问题的转义方法。您可以手动调用,也可以使用接受参数的查询形式。 E.g:
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
答案 1 :(得分:10)
这是一个很好的方法吗?我可以吗 继续这样?是sql querys以某种方式逃脱,或者我 必须编写该功能 自己?
您应首先清理SQL查询参数。例如,通过利用node-validator模块的功能来阻止SQL injection attacks。
我正在重写一个网站,我使用了 mysql db。有什么好处吗? 把它变成mongodb?
一般来说,这取决于您网站的功能和其他内容。试着看看this问题。
答案 2 :(得分:5)
如果您的网站变得更加复杂,您可能有兴趣将ORM用于MySQL。 Sequelize使用node-mysql lib并管理完整的sql内容:http://sequelizejs.com