我製作了包含一些REST服務的node.js應用程序。這些服務連接到數據庫(例如Oracle或DB2)以執行某些查詢。單獨模塊中的節點js數據庫連接
因爲我是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;
server.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
是undefined
。怎麼來的?我應該如何從db2.js
文件檢索db2連接?
問題是,您的數據庫連接是異步設置的。你在回調中將實際的連接作爲'conn'參數,而不是'.open()'的同步返回值。 – Sirko
我對'ibm_db'不熟悉,但是我會建議進行一些基本的調試來弄清楚發生了什麼。將一些'console.log'添加到不同的地方,比如在db2.js中查看它是否被加載,然後註銷dbConn以查看'db2.open'是否返回值。 – Whothehellisthat
@Whathehellist我已經這樣做了,它也是'db2.js'中的'undefined'。所以我相信它確實與回調有關,但我無法真正使它在'server.js'文件中工作。 – peterremec