我正在使用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。有没有办法使用单例模式或类似的东西,集中连接并在所有控制器中使用它?
我会花一些时间检查我的文件并理解该代码。请检查并给我一个解决方案。我做了很多事,但没有工作:(
欢迎您拉回购物并进行更新
答案 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();