哪种方法是使用自定义方法扩展ExpressJS / Response对象的正确方法?

时间:2014-10-30 09:53:59

标签: node.js express

现在我通过中间件扩展请求对象:

function(req, res, next) {
  res.customMethod = function() {

  }
  next();
}

但我认为由于污染了res.prototype名称空间,它不正确。有没有人知道更好的方法或者表达方式可能已经有任何方法吗?

1 个答案:

答案 0 :(得分:3)

你的方法几乎是完美的,但正如你所说的那样,最好避免污染res名称空间:要达到目标,你可以使用专为此原因设计的 res.locals 属性。接下来是一个片段,我将响应对象附加到我的应用程序的翻译器上。

app.use(function(req, res, next){

      function Translator (lang) {        
          this.lang = lang ? lang : 'it';

          this.translate = function (sentence) {    
              var d = dictionaries.get;

              var translation = d[this.lang] ? d[this.lang][sentence] : d['it'][sentence];          
              return translation ? translation : sentence;
          };                  
          this.setLang = function (l) {
              this.lang = l;
          };
      };

      res.locals.translator = new Translator();
      next();
});