我应该在哪里扩展Sails.js中的ServerResponse原型?

时间:2013-09-24 07:30:31

标签: javascript node.js sails.js

  • 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");

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


已于2013-09-25 09:26 UTC

添加

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

这似乎是一个使用策略的好地方,因为六元酰胺建议将原型扩展到“根源”需要更改快速中间件,我认为不推荐使用。

相反,在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();
};