在Nodejs和Express上使用Mysql(node-mysql)

林新节点和expression,我有一个关于使用MySQL的问题。 我有一个login表单发布到“/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查询是以某种方式逃脱的,还是我必须自己写这个function呢?

最后一个问题:我重写一个网站,我使用的MySQL数据库。 将它更改为mongodb有什么好处吗?

任何帮助,将不胜感激

提前致谢

乔治

这是一个好办法吗? 我可以继续这种方式吗? 那么sql查询是以某种方式逃脱的,还是我必须自己写这个function呢?

您应该先清理SQL查询参数。 例如通过利用节点validation器模块的function来防止SQL注入攻击 。

我正在重写一个网站,并使用MySQL数据库。 将它更改为mongodb有什么好处吗?

一般来说,这取决于您的网站和其他东西的function。 试着看看这个问题。

node-mysql Client对象有一个可以帮助解决这个问题的转义方法。 您可以手动调用,也可以使用接受参数的查询forms。 例如:

 client.query('SELECT id, user_name FROM user WHERE email=?', [req.body.login], ... 

注意使用参数方法实际上并没有提交一个参数化的查询到mysql,它只是照顾你的参数replace和转义。

顺便说一句,这是逃跑的作用:

https://github.com/felixge/node-mysql/blob/master/lib/protocol/SqlString.js#L3

如果你的网站变得更复杂,你可能会对你的MySQL的东西使用ORM感兴趣。 Sequelize使用node-mysql库并pipe理完整的sql的东西: http ://sequelizejs.com