学习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;
}
});
});
});
最佳答案
从外观上看,您在路由器中拥有此内容(可能是 express
),并且第一行表明您正在处理 /someurl 的
。请注意,第一个函数有 2 个参数:GET
请求req
和 res
。但您的代码没有使用它们,因此您可能不明白数据如何返回给调用者。
(req, res, next)
形式的函数称为中间件
函数,参数具有特定用途:
- req - 传入的 http 请求对象
- res - 传出的 http 响应对象
- next - 可用于告诉路由器继续或抛出错误
当您的函数收集了所需的数据后,您应该使用 res
对象将其发送回调用方。例如,如果您想返回带有一些数据的 JSON 对象,您的调用可能如下所示:
myapp.get('/someurl', (req, res) => {
return res.json({message: "it worked"});
}
在您的情况下,您想要发回数据处理的结果,因此您可以将显示 return result;
的行替换为:
return res.json(result);
这告诉 http 响应将 resultCode
设置为 200,并将响应 body
设置为 JSON 形式的 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);
}
关于javascript - 所有操作完成后返回响应nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59910799/