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

Joh*_*ohn 4 node.js express

这是一条简单的路线:

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

输出将是从"queryUsers.findAllUsers"函数返回的json.

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

res.json({
    success: true,
    payload: users
});
Run Code Online (Sandbox Code Playgroud)

这很容易手动完成,但这意味着我必须每次都写出来,这是很多打字.

是否可以向"res"对象添加新函数,以启用以下内容:

res.jsonSuccess( users );
Run Code Online (Sandbox Code Playgroud)

和:

res.jsonFail( users );
Run Code Online (Sandbox Code Playgroud)

哪个会输出

res.json({
    success: true,
    payload: users
});
Run Code Online (Sandbox Code Playgroud)

和:

res.json({
    success: false,
    payload: users
});
Run Code Online (Sandbox Code Playgroud)

分别.

cdb*_*rin 9

正如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();
});
Run Code Online (Sandbox Code Playgroud)

然后这应该工作:

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