我应该在哪里扩展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(); };