Using Mysql with Nodejs and Express (node-mysql)
我是节点和表达新手,我有一个问题
使用mysql。
我有一个登录到'/ login'的登录表单。 我使用node-mysql
模块。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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客户端对象有一个可以帮助解决这个问题的转义方法。您可以手动调用,也可以使用接受参数的查询形式。例如:
1 2 | 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
Is this a good way to do it? Can i
continue this way? And are the sql
querys escaped in some way, or do i
have to write that functionality
myself?
您应该首先清理SQL查询参数。例如,通过利用node-validator模块的功能来防止SQL注入攻击。
I'm rewriting a site, and i used the
mysql db. Are there any benefits to
changing it to mongodb?
一般来说,这取决于您的网站的功能和其他东西。试着看看这个问题。
如果您的网站变得更加复杂,您可能有兴趣将ORM用于MySQL。 Sequelize使用node-mysql lib并管理完整的sql内容:http://sequelizejs.com