将 Mysql 与 Nodejs 和 Express 一起使用 (node-mysql)

Posted

技术标签:

【中文标题】将 Mysql 与 Nodejs 和 Express 一起使用 (node-mysql)【英文标题】:Using Mysql with Nodejs and Express (node-mysql) 【发布时间】:2011-08-18 04:59:24 【问题描述】:

我是 node 和 express 的新手,我有一个关于 使用 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 数据库。在那里 将其更改为 mongodb 有什么好处?

任何帮助将不胜感激

提前致谢

乔治

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上链接现在无效(404)。 我相信 Connection.query 对于使用它的人来说更有趣:github.com/felixge/node-mysql/blob/master/lib/Connection.js#L96【参考方案2】:

如果您的网站变得更加复杂,您可能会对使用 ORM 来处理您的 MySQL 内容感兴趣。 Sequelize 使用 node-mysql 库并管理完整的 sql 内容:http://sequelizejs.com

【讨论】:

【参考方案3】:

这是一个好方法吗?我可以吗 继续这样?并且是sql 查询以某种方式逃逸了,还是我 必须编写该功能 我自己?

您应该首先清理您的 SQL 查询参数。例如,利用node-validator 模块的功能来防止SQL injection attacks。

我正在重写一个网站,我使用了 mysql数据库。有什么好处吗 改成mongodb?

一般而言,这取决于您网站的功能和其他内容。试试看this的问题。

【讨论】:

感谢您的回复 :) node-validator 看起来很棒,正是我想要的。谢谢:) node-mysql 也有转义。当然,如果你使用得当。 github.com/felixge/node-mysql#escaping-query-values

以上是关于将 Mysql 与 Nodejs 和 Express 一起使用 (node-mysql)的主要内容,如果未能解决你的问题,请参考以下文章

无法提取地理键(nodejs 和 mongo)

创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作

将 Mysql 与 Nodejs 和 Express 一起使用 (node-mysql)

nodejs express 允许跨域设置

原创基于NodeJS Express框架开发的一个VIP视频网站项目及源码分享

Nodejs Express新手教程&高手进阶