关于node.js:使用带有Nodejs和Express的Mysql(node-mysql)

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