Node.js 无法将mongoDB保存调用的响应返回到前端
我是NodeJS新手,正在学习如何打DB电话 我的数据库调用正在工作,保存数据的请求将反映在数据库中。我想将保存呼叫的响应发送到客户端(前端) 但我无法回复。等待在文件1中似乎不起作用 任何帮助或参考都将不胜感激 我的代码 具有DB连接的文件1,并调用具有save call的文件2Node.js 无法将mongoDB保存调用的响应返回到前端,node.js,mongodb,express,Node.js,Mongodb,Express,我是NodeJS新手,正在学习如何打DB电话 我的数据库调用正在工作,保存数据的请求将反映在数据库中。我想将保存呼叫的响应发送到客户端(前端) 但我无法回复。等待在文件1中似乎不起作用 任何帮助或参考都将不胜感激 我的代码 具有DB连接的文件1,并调用具有save call的文件2 app.post('/',async (req,res) =>{ try{ const val = await gameEngine.processRequest(req.body,re
app.post('/',async (req,res) =>{
try{
const val = await gameEngine.processRequest(req.body,res);
console.log(val) // prints { status: 'READY', token: Promise { <pending> } }
res.json(val);
} catch(err) {
res.json({message:err });
}
});
注意,尽管首先调用文件2中的console.log,但它会在文件1的控制台日志之后被记录。应该是这样的
return {"status":"READY", "token": await getNewDBToken(res)};
await
只等待承诺,而不等待包含承诺作为属性的对象
异步函数运行(){
常量错误=等待{
测试:延迟(1000,“错误”),
错:对,
};
console.log(错误)
常数右={
测试:等待延迟(500,'右'),
对:对,
}
console.log(右)
}
run();
功能延迟(毫秒,数值){
返回新的承诺(r=>setTimeout(r,ms,value))。然后(x=>{console.log(`value${value}在${ms}ms.之后返回);返回x;})
}
应该是这样的
return {"status":"READY", "token": await getNewDBToken(res)};
await
只等待承诺,而不等待包含承诺作为属性的对象
异步函数运行(){
常量错误=等待{
测试:延迟(1000,“错误”),
错:对,
};
console.log(错误)
常数右={
测试:等待延迟(500,'右'),
对:对,
}
console.log(右)
}
run();
功能延迟(毫秒,数值){
返回新的承诺(r=>setTimeout(r,ms,value))。然后(x=>{console.log(`value${value}在${ms}ms.之后返回);返回x;})
}
在文件2中
试着这样,
async function processRequest(body,res){
if(body.Request === "START")
{
let newToken = await getNewDBToken(res)
return await {"status":"READY", "token":newToken};
}
return {"status":"Invalid"};
}
async function getNewDBToken(res) {
try{
const status = new statusDataBase({gameStatus: createBoard()});
const saved = await ((status.save()));
console.log(saved); // prints the response as expected.
return await saved;
}
catch(err)
{res.json({message: "err1"});}
}
注意:在调用异步函数时,如果没有等待
或任何承诺,则该函数将返回
承诺{pending}在文件2中
试着这样,
async function processRequest(body,res){
if(body.Request === "START")
{
let newToken = await getNewDBToken(res)
return await {"status":"READY", "token":newToken};
}
return {"status":"Invalid"};
}
async function getNewDBToken(res) {
try{
const status = new statusDataBase({gameStatus: createBoard()});
const saved = await ((status.save()));
console.log(saved); // prints the response as expected.
return await saved;
}
catch(err)
{res.json({message: "err1"});}
}
注意:在调用异步函数时,如果没有等待
或任何承诺,则该函数将返回
Promise{pending}已尝试在所有位置使用await。已完成但无法解决问题。已尝试在所有位置使用await。已完成但无法解决问题。谢谢,它成功了。”“等待”必须放在两行中,一行在你发布的行中。文件1中“等待gameEngine.processRequest(req.body,res);”行中的第二个。@DarshanKN从技术上讲,您可以将等待放置在任何需要的地方。例如const a=[await 1,await 2,await 3,{[await'name']:await'value'}]
是有效的js。但它只有在应用于“thenable”值(最常见的承诺)时才有意义。除非“wait”在“wait gameEngine.processRequest(req.body,res);“谢谢,它成功了”,否则我不会返回DB响应“等待”必须放在两行中,一行在你发布的行中。文件1中“等待gameEngine.processRequest(req.body,res);”行中的第二个。@DarshanKN从技术上讲,您可以将等待放置在任何需要的地方。例如const a=[await 1,await 2,await 3,{[await'name']:await'value'}]
是有效的js。但它只有在应用于“thenable”值(最常见的承诺)时才有意义。除非“wait”在“wait gameEngine.processRequest(req.body,res);”行中,否则我不会返回DB响应