从Node.JS

时间:2016-03-12 08:01:52

标签: node.js express

我是来自Java背景的Node.JS新手我使用express来构建这个Rest API。我想要做的是建立一个经理的概念。我正在寻找一种返回用户对象的优雅方式:

用户路由:user.js

router.get('/find/:email', function(req, res, next){
  userWare.findUserByEmail(req, res, next)
});

middleware / manager:usermiddleware.js

module.exports = {
    findUserByEmail: function(req, res, next) {
        models.core_user.find({
            where:{
                email: req.params.email
            }
        }).then(function(user){
            res.json(user)
        }, function(err){
            res.status(404).json(err);
        });
    },
}

所以在上面的函数中我想将用户对象返回到路径而不是json。这样我就可以从路径中的对象创建json。这个经理类的重点是fectch和return对象。

1 个答案:

答案 0 :(得分:3)

您需要做的是使用您需要的数据调用回调函数或返回承诺。

<强>回调

user.js的

router.get('/find/:email', function (req, res, next) {
    userWare.findUserByEmail(req.params.email, function (err, data) {
        // error as first parameter or null if no error occurred
        if (err) {
            return res.status(404).json(err);
        }
        res.json(user);
    });
});

usermiddleware.js

module.exports = {
    findUserByEmail: function (email, next) {
        models.core_user.find({
            where: {
                email: email
            }
        }).then(
            function (user) {
                // async call of callback with user object
                next(null, user);
            }, 
            function (err) {
                // async call of callback with error
                next(err);
            }
        );
    }
};

<强>无极

您也可以返回模型返回的承诺,然后它将如下所示:

user.js的

router.get('/find/:email', function (req, res, next) {
    userWare.findUserByEmail(req.params.email).then(
        function (user) {
            res.json(user);
        }, 
        function (err) {
            res.status(404).json(err)
        }
    );
});

usermiddleware.js

module.exports = {
    findUserByEmail: function (email) {
        // return the promise to the caller
        return models.core_user.find({
            where: {
                email: email
            }
        });
    }
};