いくつかのRESTサービスを含むnode.jsアプリケーションを作成しました。これらのサービスは、クエリーを実行するためにデータベース(OracleやDB2など)に接続します。ノードjsデータベース接続が別のモジュールにある
私はnode.jsプログラミングの初心者なので、私のケースについての質問があります: データベースにアクセスする正しい方法は何ですか?アプリケーションの実行中に接続リファレンスを1つ作成し、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接続を取得する必要がありますか? @Sirkoで言っ
問題は、データベース接続が非同期に設定されていることです。実際の接続はコールバックの 'conn'パラメータとして得られ、' .open() 'の同期戻り値とはなりません。 – Sirko
私は 'ibm_db'に慣れていませんが、何が起きているのかを理解するための基本的なデバッグを提案したいと思います。いくつかの 'console.log'を別の場所に追加してください。たとえば、db2.jsのように最初にロードされているかどうかを確認し、dbConnからログアウトして' db2.open'が値を返したかどうかを確認します。 – Whothehellisthat
@Whathhellist私はすでにそれを行っており、 'db2.js'でも' undefined 'です。だから私は本当にコールバックと関係があると信じていますが、実際には 'server.js'ファイルで動作させることはできません。 – peterremec