如何在NodeJs中扩展express js res对象

这是一个简单的路线:

// 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 }); 

手动操作非常简单,但意味着每次都要input很多内容。

是否有可能添加新的function到“res”对象,启用这样的事情:

 res.jsonSuccess( users ); 

和:

 res.jsonFail( users ); 

哪个会输出

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

和:

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

分别。

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

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

这你可以做什么:

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

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