学习nodejs,如何在以下请求中返回完整响应?我似乎总是只检索结果的快照。显然,我在所有工作完成之前就回来了,请帮忙吗?
myapp.get('/someurl', (req, res) => {
dbconn.connection.then((conn) => {
conn.getdata().then((data) => {
if (data != null) {
var foo = new foo();
var result = [];
for (var i = 0; i <= data.foos.length - 1; i++) {
foo.Id = data.foos[i].myid;
foo.name = data.foos[i].atamyname;
foo.siblings = _.filter(data.foos, (fo) => {
if(fo.Id === data.foos[i].myid ){
return fo;
}
});
result.push(foo);
}
return result;
}
});
});
});
答案 0 :(得分:1)
您尝试过以下吗?
return res.json(result);
答案 1 :(得分:1)
从事物的外观来看,您在路由器中拥有此功能(也许是express
),第一行表示您正在处理GET
对/someurl
的请求。请注意,第一个函数采用2个参数:req
和res
。但是,您的代码没有使用它们,因此您可能不了解如何将数据返回给调用方。
(req, res, next)
形式的函数称为middleware
函数,这些参数具有特定用途:
函数收集了所需的数据后,应使用res
对象将其发送回调用方。例如,如果您想返回带有一些数据的JSON对象,则您的调用可能如下所示:
myapp.get('/someurl', (req, res) => {
return res.json({message: "it worked"});
}
在您的情况下,您希望将数据处理结果发送回去,因此您可以将显示为return result;
的行替换为:
return res.json(result);
这告诉http响应将JSON形式的resultCode
设置为200,并将响应body
设置为result
数组。
如果JSON不是您要返回的格式,则可以使用其他res
函数。有关更多详细信息,请参见Express documentation。
原始实现的问题是路由器未使用返回值。
此外,您需要处理data
确实以某种方式回到null
的情况。也许使用return res.status(404).end()
或return res.json([])
。
此外,您可能无法正确构建result
数组。请注意,您创建了一个foo
实例,并将该一个对象继续推送到数组中。您应该在每次循环中创建一个新的foo
对象,否则您将不断重复修改同一对象。试试这个:
if (data != null) {
var result = [];
for (var i = 0; i <= data.foos.length - 1; i++) {
var foo = new foo(); // <-- create a fresh one inside the loop
foo.Id = data.foos[i].myid;
foo.name = data.foos[i].atamyname;
foo.siblings = _.filter(data.foos, (fo) => {
if(fo.Id === data.foos[i].myid ){
return fo;
}
});
result.push(foo);
}
return res.json(result);
}