我制作了包含一些 REST 服务的 Node.js 应用程序。这些服务连接到数据库(例如 Oracle 或 DB2)以执行某些查询。
由于我是node.js编程的初学者,所以我对我的案例有一个疑问: 访问数据库的正确方法是什么?在应用程序运行时拥有一个连接引用并在调用 REST 服务时使用相同的连接实例是否更好?
我发现了一些示例,其中在单独的模块中包含数据库连接并在应用程序中使用该模块,如下所示:
db2.js:
var db2 = require('ibm_db');
var db2ConnSettings = "DRIVER={DB2};DATABASE=mydb;HOSTNAME=localhost;UID=db2test;PWD=db2test;PORT=50000;PROTOCOL=TCPIP";
var db2Conn = db2.open(db2ConnSettings, function(err, conn) {
if (err)
return console.log(err);
});
module.exports = db2Conn;
服务器.js:
var express = require('express');
var app = express();
var db2Connection = require('./db2.js');
app.get('/data', function(req, res) {
console.log(db2Connection );
// make some query
});
调用此服务时,db2connection
为未定义
。怎么会?我应该如何从 db2.js
文件检索 db2 连接?
最佳答案
正如@Sirko所说:
db2.js
var db2 = require('ibm_db');
var db2ConnSettings = "DRIVER={DB2};DATABASE=mydb;HOSTNAME=localhost;UID=db2test;PWD=db2test;PORT=50000;PROTOCOL=TCPIP";
var err, conn;
var callbacks = [];
module.exports = function(callback) {
// db2 module is called
if (err || conn) {
// connection has already been established
// (results of db2.open have been stored)
// callback immediately
callback(err, conn);
}
else {
// connection has not been established
// store the callback for when db connects
callbacks.push(callback);
}
};
db2.open(db2ConnSettings, function(_err, _conn){
// db has connected
err = _err; conn = _conn; // store results
var next_callback;
// array.pop() removed the last item from the array
// and returns it. if no items are left, returns null.
// so this loops through all stored callbacks.
while(next_callback = callbacks.pop()) {
// the removed item is stored in next_callback
next_callback(err, conn); // send connection results to callback
}
// no more items in callbacks to trigger
});
服务器.js
var express = require('express');
var app = express();
var db2Connection = require('./db2.js')(function(err, conn) {
// triggered if the connection has already been established
// or as soon as it HAS been established
app.get('/data', function(req, res) {
console.log(conn);
// ...
});
});
关于javascript - Node js 数据库连接在单独的模块中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39287247/