Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nodejs使用mysql包操作数据库 #43

Open
youngwind opened this issue Mar 14, 2016 · 0 comments
Open

nodejs使用mysql包操作数据库 #43

youngwind opened this issue Mar 14, 2016 · 0 comments
Labels

Comments

@youngwind
Copy link
Owner

问题

这年头,不会点node都不好意思说自己是前端。ok,下面显示的是一个添加用户和显示所有用户的一个简单demo。

准备条件

  1. express
  2. express generator生成的项目
  3. npm install mysql --save
  4. 电脑安装了mysql
  5. 创建数据库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.演示结果

添加用户
2016-03-14 8 15 52

查询用户
2016-03-14 8 17 01

查看数据库
2016-03-14 8 17 50

问题

  1. 每回都需要打开和关闭mysql连接,这显然是性能上的浪费,而且也会造成代码上的冗余,应该寻找解决方案。
  2. 查询语句是通过硬编码预先设定好的,这显然不够灵活,不能满足以后千奇百怪的各种sql操作,应该有封装好的包可以使用。
  3. 错误码是随便写的,是否有业内通用的错误码?而且错误码应该定义在一个统一的地方。
  4. 错误抛出与res返回错误提示应该是什么样的关系?
  5. 没有进行参数的校验。

参考资料:
http://www.alloyteam.com/2015/03/sexpressmysql/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant