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

  • Sails.js v0.9.4
  • Node.js v0.10.18
  • Express.js v3.2.6

我写了帆简单的Web应用程序。 我想为ServerResponse原型添加新的function,以便进行常见的错误响应,如下所示。

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

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

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

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

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

这似乎是一个使用策略的好地方,因为随着hexacyanide的build议,“从根本上扩展原型”将会要求更改expression式中间件,我认为这是不被推荐的。

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