2016-03-03 60 views
1

下面是一个简单的路线:如何延长快递JS资源对象的NodeJS

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

输出将是JSON从“queryUsers.findAllUsers”函数返回。

这是伟大的,但我想的路线,通过一些更刚性所有的json输出,输出将是:

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

这是很容易做手工,但意味着我不得不写这一点,每个这是很多打字的时间。

是否有可能以新的功能添加到 “资源” 的对象,以使这样的事情:

res.jsonSuccess(users); 

和:

res.jsonFail(users); 

这将输出

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

和:

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

回答

5

正如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"]); 
}); 
+0

AHHHH我得到它吧!一分钱一滴。非常感谢:D – John

0

当然,你可以写一些简单的middleware,然后像通常一样app.use(yourmiddleware)。

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) 
    }) 
}) 
+0

现在。我没有。 'apply'获取一系列参数。而'arguments'就是'send'得到的参数。我想在做我们的方法后用相同的'arguments'运行原始方法。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply – Aminadav