【问题标题】:Where should I extend prototype of ServerResponse in Sails.js?我应该在哪里扩展 Sails.js 中的 ServerResponse 原型?
【发布时间】:2013-09-27 14:19:59
【问题描述】:
  • Sails.js v0.9.4
  • Node.js v0.10.18
  • Express.js v3.2.6

我已经编写了sails 简单的Web 应用程序。 我想为ServerResponse原型添加新功能,以获取以下常见错误响应。

UtilService.js

require('http').ServerResponse.prototype.returnError = function (message) {
    console.error("Error: " + message);
    return this.view("./error", { errors: [{ stack: message }] });
};

FooController.js

require("../services/UtilService");

以上代码运行良好。但我不会向所有控制器写相同的 sn-p。 我怎样才能保持干燥?换句话说,我应该在扩展代码上面写哪个文件?


添加于 2013-09-25 09:26 UTC

感谢您的意见和建议。 我向config/bootstrap.js 添加了特殊逻辑,因为我只想运行一次原型修改代码。 这看起来工作正常。

config/bootstrap.js

module.exports.bootstrap = function (cb) {
  cb();
  require('http').ServerResponse.prototype.returnError = function (message) {
    console.error("Error: " + message);
    return this.view("./error", { errors: [{ stack: message }] });
  };
};

【问题讨论】:

    标签: javascript node.js sails.js


    【解决方案1】:

    感谢您的意见和建议。我向config/bootstrap.js 添加了特殊逻辑,因为我只想运行一次原型修改代码。这看起来工作正常。

    config/bootstrap.js

    module.exports.bootstrap = function (cb) {
      cb();
      require('http').ServerResponse.prototype.returnError = function (message) {
        console.error("Error: " + message);
        return this.view("./error", { errors: [{ stack: message }] });
      };
    };
    

    【讨论】:

    • 当我只有一个简单的http.Server(没有像sails或express这样的框架)时,你知道如何扩展ServerResponse原型吗?
    【解决方案2】:

    这似乎是一个使用策略的好地方,因为按照 hexacyanide 的建议“从根”扩展原型需要更改 express 中间件,我认为不推荐这样做。

    相反,在config/policies.js 中,尝试为所有操作添加默认策略,例如:

    someController: {
      '*': httpPrototype
    }
    

    httpPrototype 策略可能如下所示:

    module.exports = function httpPrototype (req, res, next) {
      require('http').ServerResponse.prototype.returnError = function (message) {
        console.error("Error: " + message);
        return this.view("./error", { errors: [{ stack: message }] });
      };
      next();
    };
    

    【讨论】:

    • 感谢您的建议!我想避免每个请求都执行,所以我修改了config/bootstrap.js。但是您对policies.js 的建议对我来说真的很有价值。
    • 您能否在另一个答案中分享您的实现并接受它?这样未来的读者就可以从您在这里的体验中受益。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    相关资源
    最近更新 更多