首页 > 解决方案 > 实现此服务/控制器模式的最佳方法是什么?

问题描述

在我的 nodejs/express rest api 中使用服务/控制器模式。在我调用 mongodb 的服务中。我希望在服务中发生错误处理/抛出,但我不想共同调用User.find()两次。

控制器.js

exports.findAll = (req, res, next) => {
    userService.findAllUsers()
        .then(users => res.json(users))
        .catch(err => next(err));
};

服务.js

async function findAllUsers() {
    if(await User.find()) {
        return await User.find()
    } else {
        throw "Couldn't retrieve all users"
    }
}

User.find()如果失败,我将如何重写服务功能,以便能够抛出错误?

标签: node.jsexpressasynchronouspromise

解决方案


只需将其存储在变量中:

async function findAllUsers() {
    let users = await User.find();
    if(users) {
        return users;
    } else {
        throw "Couldn't retrieve all users"
    }
}

推荐阅读