从Node查询数据库时,如何将HTTP响应对象传递给异步回调?例如(db stuff是伪代码):
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
传递给回调时,Node会给出一个错误,即结果延续对象没有方法write
。
这里最好的策略是什么?
答案 0 :(得分:3)
通过在回调函数声明中添加响应,您将创建一个新的空响应对象,该对象仅在回调函数中具有作用域。
相反,您需要做的就是删除响应参数。
function callback(error, results) // response is outside of function
在此回调函数中,变量响应现在将引用createServer回调的原始响应变量。由于此函数位于createServer回调内,因此它可以访问响应对象。
答案 1 :(得分:-3)
使用repsonse.send(index)
基本上,您只能打印响应对象以查看其中的功能。
console.log(response)