2013-04-04 105 views
1

我想猴子补丁快递的res.json()res.render()结合对象与闪烁和错误。所以,我可以这样做:想要猴子补丁express res.json - 有没有更好的方法?

res.flash('error', 'You suck!'); 
res.formError('moneyInput', 'Give me more!'); 
... later 
res.json({success: false}); 

,它会返回: {flashes: [{error: 'You suck!'}], errors: [{'moneyInput': 'Give me more!'}], content: {success: false}}

,同样res.render会坚持这些东西到当地人的模板。

所以现在 - 猴子补丁似乎是最好的课程。我计划在中间件中进行修改。

问题:
有没有更好的选择?
有没有其他人这样做?
有哪些缺陷? (除有我每次升级快递的时间来更新我的代码)

+2

看看这个答案: http://stackoverflow.com/questions/14655968/how-to-configure-the-express-response-object-to-automatically-add-attributes-to – 2013-04-04 21:37:41

+0

如果您在运行时通过中间件将它修补到内存中,则无需每次升级Express时都更新代码。 – 2013-04-05 07:11:56

+0

如果底层的实现改变,我想重写我的猴子补丁(可能) – mkoryak 2013-04-05 17:23:12

回答

0

一种替代它的待处理的数据存储响应对象,但没有猴子补丁在那里方法:

function flash (res, type, message) { //stick this in a shared module 
    res._flash = {}; 
    res._flash[type] = message; 
    return res; 
} 
//in some handler function 
flash(res, 'error', 'You suck!'); 

不过,我想说少数真正有用的功能,只是猴子补丁,冒险。例如,在使用bodyParser中间件时,动态地将数据字段添加到响应中已经是惯例,这是res.body来的地方。如果你想对名称冲突产生偏执,只需添加一个前缀,如res._mkFlash