在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
- 我怎样才能在JSON中安全地使用用户提供的文本?
- 浏览器控制台错误:无法从“react / lib / ReactAddonsDOMDependencies.js”中find模块“react-dom / lib / ReactPerf”
- Nodejs可选正则expression式命名组的插件或代码片段
- 在nodejs中不要replace自封闭的br或img标签
- Express.js中间件集成testing
- node.js – 将正则expression式发送到服务器
- 超级testing表示中间件
- Express.js抛出错误:ENOENT在Linux服务器上
- 如何在JavaScript中获取<a href="http://www.mysite.com">的URL?