Javascript 所有操作完成nodejs后返回响应
学习nodejs,如何在以下请求中返回完整响应?我似乎总是检索到结果的快照。很明显,我在所有工作完成之前就回来了,请问有什么帮助吗Javascript 所有操作完成nodejs后返回响应,javascript,node.js,Javascript,Node.js,学习nodejs,如何在以下请求中返回完整响应?我似乎总是检索到结果的快照。很明显,我在所有工作完成之前就回来了,请问有什么帮助吗 myapp.get('/someurl', (req, res) => { dbconn.connection.then((conn) => { conn.getdata().then((data) => { if (data != null) { var foo = n
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;
}
});
});
});
myapp.get('/someurl',(req,res)=>{
dbconn.connection.then((conn)=>{
连接getdata()。然后((数据)=>{
如果(数据!=null){
var foo=new foo();
var结果=[];
对于(var i=0;i{
if(fo.Id==data.foos[i].myid){
返回fo;
}
});
结果:推送(foo);
}
返回结果;
}
});
});
});
您是否尝试过以下方法
return res.json(result);
你试过以下方法吗
return res.json(result);
从路由器的外观来看(可能是
express
),第一行表示您正在处理/someurl
的GET
请求。注意,第一个函数有两个参数:req
和res
。但是,您的代码没有使用它们,因此您可能不了解数据是如何返回给调用方的
(req,res,next)
形式的函数称为中间件
函数,参数有特定用途:
- req-传入的http请求对象
- res-传出http响应对象
- 下一步-可用于通知路由器继续或抛出错误
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
函数。有关更多详细信息,请参阅
原始实现的问题是路由器没有使用返回值
此外,您还需要处理数据
以某种方式返回为null
的情况。可能通过使用返回res.status(404.end()
或返回res.json([])
除此之外,您可能无法正确构建结果
数组。请注意,您创建了一个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);
}
如果(数据!=null){
var结果=[];
对于(var i=0;i从路由器的外观来看(可能是express
)第一行表示您正在处理对/someurl
的GET
请求。请注意,第一个函数包含两个参数:req
和res
。但是您的代码没有使用它们,因此您可能不了解数据是如何返回给调用方的
(req,res,next)
形式的函数称为中间件
函数,参数有特定用途:
- req-传入的http请求对象
- res-传出http响应对象
- 下一步-可用于通知路由器继续或抛出错误
当您的函数收集了所需的数据后,您应该使用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
函数。有关更多详细信息,请参阅
原始实现的问题是路由器没有使用返回值
此外,您还需要处理数据
以某种方式返回为null
的情况。可以使用返回res.status(404).end()
或返回res.json([])
除此之外,您可能无法正确构建结果
数组。请注意,您创建了一个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);
}
如果(数据!=null){
var结果=[];
对于(var i=0;谢谢),这不是问题。我确实得到了响应,但没有得到完全的响应。谢谢,这不是问题。我确实得到了响应,但没有得到完全响应。返回RES.JSON(结果)不返回完整响应。您认为什么是“完全响应”??我希望看到4个对象返回,但是我总是返回1,这是最后一个。实际上,忽略我,问题是我总是返回数组中的最后一个元素,这是我的代码的结果!jheezi将标记它,以便在将来帮助其他人,在我的实例中,这是一个逻辑错误:)return res.json(result)不返回完整的响应,你认为什么是“完全响应”?我希望看到4个对象返回,但是我总是返回1,这是最后一个实际上忽略我的问题,问题是我总是返回数组中最后一个元素,结果是在我的代码中!