如何在NodeJs中扩展表达js res对象

时间:2016-03-03 20:21:03

标签: node.js express

这是一条简单的路线:

// get all users
app.get('/api/user/get-all', authenticated.yes, function(req, res) {
    queryUsers.findAllUsers( function( users ){
        res.json( users );
    } );
});

输出将是“queryUsers.findAllUsers”函数返回的json。

这很好,但是我想通过更严格的东西来路由我所有的json输出,所以输出将是:

res.json({
    success: true,
    payload: users
});

这很容易手动完成,但意味着我每次都需要写出来这很多。

是否可以向“res”对象添加新功能,以启用以下内容:

res.jsonSuccess( users );

res.jsonFail( users );

哪个会输出

res.json({
    success: true,
    payload: users
});

和:

res.json({
    success: false,
    payload: users
});

分别

3 个答案:

答案 0 :(得分:8)

正如loadaverage指出的那样,中间件就是你如何做到的。更具体的一点:

app.use(function(req, res, next) {

    res.jsonFail = function(users) {
        return res.json({
            success: false,
            payload: users
        })
    };

    res.jsonSuccess = function(users) {
        return res.json({
            success: true,
            payload: users
        });
    };

    next();
});

然后这应该有效:

app.get("/my/route", function(req, res) {
    return res.jsonSuccess(["you", "me"]);
});

答案 1 :(得分:1)

有时我想用新方法扩展当前方法。 例如,记录我发送的所有内容。

你能做什么:

app.use(function (req, res, next) {
    var _send = res.send
    res.send = function (data) {
      console.log('log method on data', data)
      // Call Original function
      _send.apply(res, arguments)
    })
})

答案 2 :(得分:0)

当然,你可以像往常一样写一些简单的middleware,然后是app.use(你的中间件)。