将 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项目并接入mysql,完成用户相关的增删改查的详细操作
将 Mysql 与 Nodejs 和 Express 一起使用 (node-mysql)