2012-02-15 8 views
2

ノードからデータベースにクエリを実行するとき、非同期コールバックに対してHTTP応答オブジェクトをどのように渡しますか?例えば、(dBのものである擬似コードは):Node.jsのコールバックにHTTPレスポンスを渡すには?

var http = require('http'); 
http.createServer(function (request, response) { 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
    // read from database: 
    var dbClient = createClient(myCredentials); 
    var myQuery = 'my query goes here'; 
    dbClient.query(myQuery, callback); 

    function callback(error, results, response) // Pass 'response' to the callback? 
    { 
    if (error === null) { 
     for (var index in results) response.write(index); // Error 
     response.end('End of data'); 
    } 
    else { 
     response.end('Error querying database.') 
    } 
    } 
}).listen(1337, "127.0.0.1"); 

コールバックにresponseを渡し、ノードが結果継続オブジェクトがメソッドwriteを有していないというエラーを返します。

ここで最適な戦略は何ですか?

答えて

3

コールバック関数宣言にレスポンスを設定すると、コールバック関数でのみスコープを持つ新しいnullレスポンスオブジェクトが作成されます。

代わりに、応答パラメータを削除するだけで済みます。

function callback(error, results) // response is outside of function 

このコールバック関数では、変数responseがcreateServer callbackの元の応答変数を参照するようになりました。この関数はcreateServerコールバックの内部にあるため、レスポンスオブジェクトにアクセスできます。

-3

使用repsonse.send(index)

基本的には、内部が何であるかの関数を参照するためにのみ応答オブジェクトを印刷することができます。

console.log(response)