Open
Description
问题
这年头,不会点node都不好意思说自己是前端。ok,下面显示的是一个添加用户和显示所有用户的一个简单demo。
准备条件
- express
- express generator生成的项目
- npm install mysql --save
- 电脑安装了mysql
- 创建数据库test和数据表mytable,mytable有两个字段。id:int(4), name:varchar(20)(当然,名字你可以随便取,下面相应的改变代码就好了)
使用方法
1. 把mysql的配置写在配置文件中
// config.js
module.exports = {
// MySQL数据库联接配置
mysql: {
host: '127.0.0.1',
user: 'root',
password: '',
database:'test', // 数据库名字
port: 3306
}
};
2. 添加路由
// routers/users.js
// 增加用户
router.get('/addUser', function (req, res, next) {
user.add(req, res, next);
});
// 返回所有用户
router.get('/allUser', function (req, res, next) {
user.all(req, res, next);
});
3. 定义sql查询语句
// 定义文件 controller/userSqlMapping.js
var user = {
insert:'INSERT INTO mytable(id, name) VALUES(?,?)',
queryAll: 'select * from mytable'
};
module.exports = user;
4. 编写控制器中间件
// controller/user.js
"use strict";
// 实现与MySQL交互
var mysql = require('mysql');
var config = require('../common/config.js');
var $sql = require('./userSqlMapping');
module.exports = {
// 添加用户
add: function (req, res, next) {
var param = req.query || req.params;
var connection = mysql.createConnection(config.mysql);
connection.connect();
connection.query($sql.insert, [param.id, param.name], function (err, rows, fields) {
if (err) {
res.json({
code: '1',
msg: '操作失败'
});
}
res.json({
code: 200,
msg: "增加成功"
});
});
connection.end();
},
// 返回用户信息
all: function (req, res, next) {
var connection = mysql.createConnection(config.mysql);
connection.connect();
connection.query($sql.queryAll, function (err, rows, fields) {
if (err) {
res.json({
code: '1',
msg: '操作失败'
});
}
res.json({
code: 200,
msg: rows
});
});
connection.end();
}
};
5.演示结果
问题
- 每回都需要打开和关闭mysql连接,这显然是性能上的浪费,而且也会造成代码上的冗余,应该寻找解决方案。
- 查询语句是通过硬编码预先设定好的,这显然不够灵活,不能满足以后千奇百怪的各种sql操作,应该有封装好的包可以使用。
- 错误码是随便写的,是否有业内通用的错误码?而且错误码应该定义在一个统一的地方。
- 错误抛出与res返回错误提示应该是什么样的关系?
- 没有进行参数的校验。