现在我通过中间件扩展请求对象:
function(req, res, next) {
res.customMethod = function() {
}
next();
}
但我认为由于污染了res.prototype名称空间,它不正确。有没有人知道更好的方法或者表达方式可能已经有任何方法吗?
答案 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();
});