我正在使用 Node Express 和 Postgress。 我不确定我想做的是一个好的做法还是一个很大的错误。 当我已经向客户端返回结果后,将数据异步保存到数据库。
我尝试用 console.log 来演示它,以检查我的服务器在保存过程中是否会被阻止。
在这里您可以看到 status
路由和 statusB
路由。
app.get("/statusB", async (req, res) => {
return res.status(200).send("testAAA");
});
app.get("/status", async (req, res) => {
const userStats = await UserController.getData("id")
const x = test();
return res.status(200).send(userStats);
});
async function test() {
return new Promise(() => {
for (let x = 0; x < 10000; x++) {
setTimeout( () => {
console.log(x)
}, 5000);
}
})
}
我想要发生的情况是,如果我发送 /status
并在发送 statusB
之后立即发送。
我希望输出是:
/status
将返回 userStats 数据
/StatusB
返回“testAAA”
并且计数器将异步运行。
但实际输出是:
- /status
返回 userStats 数据
- 反跑
- /StatusB
仅在计数器完成后返回“testAAA”
控制台日志只是测试我是否可以异步获取数据并将其保存到数据库,而不是控制台日志。
最佳答案
取决于您的业务案例。
如果您的客户可以获取 200 OK
状态代码,即使保存实际上可能失败,那么当然,您可以在响应后异步执行此操作。
在其他情况下,您需要在请求中进行保存,并且只有在确定一切都安全无误后才做出响应。
关于node.js - 我应该异步将数据保存到数据库吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56683993/