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

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

实用服务.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 }] });
  };
};
4

2 回答 2

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 }] });
  };
};
于 2013-09-27T06:12:35.847 回答
0

这似乎是使用策略的好地方,因为按照六氰化物的建议“从根”扩展原型将需要更改 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();
};
于 2013-09-24T16:31:04.903 回答