Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法将mongoDB保存调用的响应返回到前端_Node.js_Mongodb_Express - Fatal编程技术网

Node.js 无法将mongoDB保存调用的响应返回到前端

Node.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

我是NodeJS新手,正在学习如何打DB电话

我的数据库调用正在工作,保存数据的请求将反映在数据库中。我想将保存呼叫的响应发送到客户端(前端)

但我无法回复。等待在文件1中似乎不起作用

任何帮助或参考都将不胜感激

我的代码

具有DB连接的文件1,并调用具有save call的文件2

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响应