可以使用异步函数处理请求吗?

时间:2019-03-17 13:58:10

标签: node.js express azure-cosmosdb

我的大多数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,据我所知所有操作都是异步的,这样做是否正确?

2 个答案:

答案 0 :(得分:2)

如果您不想阻止您的控制器,那就不会。

您的控制器应只将结果传递回路由处理程序,在import os print(os.cpu_count()) 中您将在Promise处理程序中处理结果并发送响应。

个人(不确定这是否是节点/ javascript设计模式),我喜欢将请求处理程序和(数据,服务...)控制器之间的关注点分开,这意味着处理程序将从请求中提取数据,并调用控制器并根据结果构造http响应。我将从控制器发回HTTP响应

答案 1 :(得分:1)

是的。这是构建服务器时的正确处理方式。所有的I / O操作(例如与db / network / disk通信等等)都必须是异步的。