如何在node.js中使用单独的设计模式与mysql连接和池

时间:2016-07-21 04:57:10

标签: mysql node.js express node-mysql

我正在使用node-mysql作为orm。 (https://github.com/mysqljs/mysql

我正在使用MySQL和Node.JS创建REST API。之前我使用MongoDB做了同样的事情。它工作正常。 github.com/chanakaDe/Mint-REST。现在我想用MySQL做同样的事情。我完成了大部分工作并遇到了一些问题。有很多类,我需要集中使用mysql连接。作为单身设计模式。

这是我的新回购。 https://github.com/chanakaDe/MintRestSQL。我将展示我想要使用这些模式的位置。这里我有数据库文件。我创建了一个新的连接池。 github.com/chanakaDe/MintRestSQL/blob/master/app/util/database.js。

现在我想在我的控制器类中使用这个连接/池。因为我无法在每个控制器类中创建连接。不是吗?这些是我现在的两个控制器。 github.com/chanakaDe/MintRestSQL/blob/master/app/routes/report.js github.com/chanakaDe/MintRestSQL/blob/master/app/routes/api.js

请告诉我一个更好的方法。我是node-mysql的新手。但它是在Node.JS环境中使用MySQL的好方法,即使对于生产级系统也是如此。所以我想用这些标准制作一个好的API。有没有办法使用单例模式或类似的东西,集中连接并在所有控制器中使用它?

我会花一些时间检查我的文件并理解该代码。请检查并给我一个解决方案。我做了很多事,但没有工作:(

欢迎您拉回购物并进行更新

2 个答案:

答案 0 :(得分:2)

尝试将database.js更改为

var mysql = require('mysql');

mysql.createPool({
  host     : 'localhost', 
  user     : 'root',
  password : 'chanaka',
  database : 'shared_adult'
}).connect();

module.exports = mysql;

答案 1 :(得分:1)

为到达此处的人(像我一样)提供替代方案,以便注入依赖关系(即凭证)。以下是将产生运行时可配置单例​​的方法:

var mysql = require('mysql'),
    db;

module.exports = {
    init: function(conf){
        if(!db){
          db = mysql.createPool({
                host: conf.host, 
                user: conf.root,
                password: conf.password,
                database: conf.database
              });
        }
    },
    get: function() {
      if(!db) {
        throw new Error('The db pool has not been initialized, call init({}) prior to get().');
      }

      return db;    
    }
};

//initialize where you access your config (which should theoretically only be one place)
var mysqlDb = require('db'); //path to above db module

mysqlDb.init({
  host: 'host',
  user: 'user',
  password: 'password',
  database: 'database'
});

//use in your modules
var mysqlDb = require('db'), //path to above db module
    db = mysqlDb.get();