【问题标题】:want to monkey patch express res.json - is there a better way?想要猴子补丁快递 res.json - 有没有更好的方法?
【发布时间】:2013-04-05 15:17:40
【问题描述】:

我想对 express 的 res.json()res.render() 进行猴子补丁,以将对象与闪烁和错误结合起来。所以我可以这样做:

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 会将这些内容粘贴到模板的本地人中。

所以现在 - 猴子修补似乎是最好的课程。我打算在中间件中对其进行monkeypatch。

问题:
有没有更好的选择?
有其他人这样做过吗?
有什么陷阱? (除了每次升级 express 时都必须更新我的代码)

【问题讨论】:

  • 如果您在运行时通过中间件在内存中进行猴子修补,那么每次升级 express 时都不需要更新代码。
  • 如果底层实现发生变化我想重写我的猴子补丁(可能)

标签: node.js express


【解决方案1】:

另一种方法是将待处理的数据存储在响应对象上,但不对其中的方法进行猴子修补:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2012-07-26
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多