我的大多数http请求都执行异步的数据库操作,因此它们大多数如下所示:
myRouter.post('/groups', (req, res, next) => {
groupsController.createGroup(req, res).catch(next);
})
在控制器内部,我将等待db响应,然后再这样响应:
exports.createGroup = async function(req,res){
var group = req.body.group;
// retrieving the database object and performing the asyncrhonous action
group = await req.app.get('db').createGroup(group);
res.status(201).json(group);
}
我正在使用cosmos db,据我所知所有操作都是异步的,这样做是否正确?
答案 0 :(得分:2)
如果您不想阻止您的控制器,那就不会。
您的控制器应只将结果传递回路由处理程序,在import os
print(os.cpu_count())
中您将在Promise处理程序中处理结果并发送响应。
个人(不确定这是否是节点/ javascript设计模式),我喜欢将请求处理程序和(数据,服务...)控制器之间的关注点分开,这意味着处理程序将从请求中提取数据,并调用控制器并根据结果构造http响应。我将从控制器发回HTTP响应
答案 1 :(得分:1)
是的。这是构建服务器时的正确处理方式。所有的I / O操作(例如与db / network / disk通信等等)都必须是异步的。