2012-02-15 3 views
2

При запросе базы данных из узла, как передать объект ответа HTTP на асинхронный обратный вызов? Например (дб материал псевдокод):Как передать HTTP-ответ на обратный вызов в Node.js?

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

Поставив ответ в объявлении функции обратного вызова, вы создаете новый объект с нулевым ответом, который имеет область видимости только в функции обратного вызова.

Вместо этого все, что вам нужно сделать, это удалить параметр ответа.

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

И в рамках этой функции обратного вызова, переменная отклика теперь будет относиться к исходной переменной отклика createServer обратного вызова. Поскольку эта функция находится внутри обратного вызова createServer, она будет иметь доступ к объекту ответа.

-3

Использование repsonse.send(index)

В принципе, вы можете напечатать только объект ответа, чтобы увидеть, какие функции внутри.

console.log(response)

Смежные вопросы