0

渡された URL を見て、正しいデータベース接続文字列を返す node.js アプリケーションの作成に取り組んでいます。以下は私のgenericServer.jsファイルです。2 番目のコード ブロックは、私の Connection.js ファイルです。ID が URL で genericServer ファイルに渡されると、それをミドルウェアの connection.getConnString に渡します。

var express = require('express');
var connection = require('./connection');

var connString = "";
var app = express();

app.get('/connectionString/:id', connection.getConnString, function(res){
res.on('response', function(response) {
    res.on('data', function(chunk) {
        connString += chunk;
    console.log("The connection String is: " + connString);
    });
});
});
app.listen(3333);

現在、以下のコードは正しい接続情報を返しますが、このデータを (genericserver.js) サーバー レベルの変数に格納する必要があります。私は、connection.GetConnString ミドルウェアを呼び出した後、genericServer.js で function(res) を使用して応答をキャッチできると考えました。これまでのところ、ミドルウェアが処理して応答を返しているようですが、関数 (res) {} へのコールバックは発生しません。

app.get() を使用しながら、connection.getConnString 応答を genericServer 呼び出しの変数に格納する方法についてのアイデアはありますか?

var sql = require('msnodesql');
var app = require('express');

exports.getConnString = function(req, res) {

sql.query(conn_str, "SELECT DatabaseLocation, URL FROM dbo.Hospitals WHERE URL = '" + req.params.id + "'", function(err, results) {
    if (err) {
        console.log("Error running query!");
        console.log(err); return;
    };
    res.writeHead(200, {
    'Content-Type': 'text/plain'
});

    var connectionString = "";
    switch (results[0].DatabaseLocation){
        case "172.16.42.243":
            connectionString = '\"Driver={SQL Server Native Client 11.0};Server=DevelopmentSQL1;Initial Catalog={' + results[0].URL + '};Database={' + results[0].URL + '};UID={userID};PWD={pssWrd};\";'
            break;
        case "172.16.42.244":
            connectionString = '\"Driver={SQL Server Native Client 11.0};Server=DevelopmentSQL2;Initial Catalog={' + results[0].URL + '};Database={' + results[0].URL + '};UID={userID};PWD={pssWrd};\";'
            break;
        case "172.16.42.245":
            connectionString = '\"Driver={SQL Server Native Client 11.0};Server=DevelopmentSQL3;Initial Catalog={' + results[0].URL + '};Database={' + results[0].URL + '};UID={userID};PWD={pssWrd};\";'
            break;
        case "172.16.42.246":
            connectionString = '\"Driver={SQL Server Native Client 11.0};Server=DevelopmentSQL4;Initial Catalog={' + results[0].URL + '};Database={' + results[0].URL + '};UID={userID};PWD={pssWrd};\";'
            break;
        case "172.16.42.247":
            connectionString = '\"Driver={SQL Server Native Client 11.0};Server=DevelopmentSQL5;Initial Catalog={' + results[0].URL + '};Database={' + results[0].URL + '};UID={userID};PWD={pssWrd};\";'
            break;
}
    console.log(connectionString);
    res.end(connectionString);
});

};

4

1 に答える 1

1

応答を使用してデータを渡すことは、適切な方法ではありません。ミドルウェアでは、接続文字列を次のプロパティとして設定できますreq

exports.getConnString = function(req, res, next) {
  sql.query(..., function(err, results) {
    ... // get the connection string as per your code
    req.connectionString = connectionString;
    next(); // call the next middleware/route
  });
};

次にルート ハンドラが呼び出され、そこでプロパティにアクセスできます。

app.get('/connectionString/:id', connection.getConnString, function(req, res) {
  console.log("The connection String is: ", req.connectionString);
  res.send(req.connectionString);
});
于 2013-03-22T20:13:47.083 に答える