Ich machte node.js App, die einige REST-Dienste enthält. Diese Dienste stellen eine Verbindung zu einer Datenbank her (z. B. Oracle oder DB2), um bestimmte Abfragen auszuführen.Knoten js Datenbankverbindung in einem separaten Modul
Da ich ein Anfänger in node.js Programmierung bin, habe ich eine Frage zu meinem Fall: Was ist der richtige Weg, um auf eine Datenbank zuzugreifen? Ist es besser, eine Verbindungsreferenz zu haben, während die App läuft, und dieselbe Verbindungsinstanz zu verwenden, wenn REST-Dienste aufgerufen werden?
fand ich einige Beispiele, die Datenbankverbindung in einem separaten Modul enthält und das Modul in App verwenden, so ähnlich:
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
});
Wenn dieser Service aufgerufen wird, lautet db2connection
undefined
. Woher? Wie sollte ich eine db2-Verbindung von db2.js
Datei abrufen?
Das Problem ist, dass Ihre Datenbankverbindung asynchron eingerichtet ist. Sie erhalten die eigentliche Verbindung als 'conn'-Parameter im Callback und nicht als synchronen Rückgabewert von' .open() '. – Sirko
Ich bin nicht vertraut mit 'ibm_db', aber ich würde ein paar grundlegende Debugging vorschlagen, um herauszufinden, was los ist. Fügen Sie einige 'console.log's zu verschiedenen Stellen hinzu, wie in db2.js, um zu sehen, ob es an erster Stelle geladen ist, und melden Sie sich dann dbConn ab, um zu sehen, ob' db2.open' einen Wert zurückgegeben hat. – Whothehellisthat
@Whothehellisthat ich schon das getan und es ist 'undefiniert' auch in' db2.js'. Ich glaube also, dass es wirklich etwas mit Callback zu tun hat, aber ich kann es nicht wirklich in der Datei 'server.js' arbeiten lassen. – peterremec