实现此服务/控制器模式的最佳方法是什么?

时间:2019-09-13 11:04:48

标签: node.js express asynchronous promise

在我的nodejs / express rest API中,使用服务/控制器模式。 在服务中,我打电话给mongodb。我希望在服务中进行错误处理/抛出错误,但是我不希望两次共同致电User.find()

controller.js

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

service.js

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

如果User.find()失败,我该如何重写服务功能才能引发错误?

3 个答案:

答案 0 :(得分:1)

只需将其存储在变量中:

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

答案 1 :(得分:0)

使用try catch

async function findAllUsers() {
    try {
        return await User.find();
    } catch(error) {
        return error;
    }
}

答案 2 :(得分:0)

使用以下内容:

// # service.js
async function findAllUsers() {
    // # return with new promise.
    return new Promise((resolve, reject) => {
        return await User.find().then(user => resolve(user)).error(er => reject(er));
    });
}

有关更多参考,请克隆此仓库:https://github.com/sagormax/node-admin