Node.js如何连接Mysql
沉沙 2018-05-15 来源 : 阅读 948 评论 0

摘要:在Node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池。 希望本文对您学习Node.js有所帮助。

  在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池。 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以单独对mysql配置,也可以把connection集成到express中间件中。


前提条件

      1、安装mysql对应的驱动,npm install mysql

      2、安装第三方插件express-connection, npm install express-connection

 

普通连接

var mysql      = require('mysql');var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : 'secret',
  database : 'my_db'
});
connection.connect();
connection.query('select  * from solution', function(err, rows, fields) {
  if (err) throw err;
    console.log('The solution is: ', rows);
});
connection.end();

 

连接池

    引入连接池后,最省事之处就是你不用每次用完以后去手动关闭connection。连接池的option还有很多选项,可以根据自己的需要来配置。


var mysql = require('mysql');var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'example.org',
  user            : 'bob',
  password    : 'secret'
});
pool.query('select  * from solution', function(err, rows, fields) {
  if (err) throw err;
  console.log('The solution is: ', rows);
});


    当然如果你的应用没有那么多,而你对连接池回收机制又不放心,也可以手动关闭连接实现把连接放回到资源池里,调用connection.release()


pool.getConnection(function(err, connection) {
  // Use the connection
  connection.query( 'SELECT something FROM sometable', function(err, rows) {
    // And done with the connection.    connection.release();
    // Don't use the connection here, it has been returned to the pool.  });
});


    关闭整个连接池的连接

pool.end(function (err) {
  // all connections in the pool have ended
});

 

express-myconnection

       express-myconnection是一个Connect/Express自动提供mysql 连接的中间件。 共提供三中策略管理db连接。

single。 创建单数据库应用实例,连接从不会关闭,万一连接因故障断掉,它还会重新连接。

pool。   基于应用程序实例创建连接池,并且对每一个请求从连接池里提供连接,连接在每次response会自动释放返回到连接池里去。

request。 针对每个request创建新的连接, 并且在response结束时会自动关闭。

 

    这也是我在项目里所使用的方法,因为业务逻辑不复杂,没有封装db层,直接在app.js里配置,然后在路由层里直接调用。

 

app.js


var mysql = require('mysql'), 
    myConnection = require('express-myconnection'),
    dbOptions = {
      host: 'localhost',
      user: 'dbuser',
      password: 'password',
      port: 3306,
      database: 'mydb'
    };
  
app.use(myConnection(mysql, dbOptions, 'single'); //作为中间件来使用


/router/order.js 在路由文件里应用

在这里也可以调用存储过程:conn.query('call usp_test',[传参数],

function(err,result))
router.get('/cost', function(req, res, next) {
 
    req.getConnection(function(err, conn) {
        if (err) {
           
            return next(err);
        } else {
            conn.query('select * from test', [], function(err,result) {
                if (err) {
                    return next(err);
                } else {
                    res.Json(result); //可以直接把结果集转化Json返回给客户端                }
            });
        }
    });
});


本文由职坐标整理发布,欢迎关注职坐标Node.js频道,学习更多数据库知识!


本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved