gpt4 book ai didi

javascript - Node js 数据库连接在单独的模块中

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:33 24 4
gpt4 key购买 nike

我制作了包含一些 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com