如何在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)。