我看到的所有示例都使用app.dynamicHelpers
提供了一种在我的视图模板中访问我的 javascript 文件的方法。但是在 express 3.x 中没有明确的方法可以做到这一点。迁移文档说“使用中间件”。我对“中间件”的概念比较陌生,不知道如何实现。
我想知道的是在我的视图模板中包含 javascript 文件的最优雅的方式。
我看到的所有示例都使用app.dynamicHelpers
提供了一种在我的视图模板中访问我的 javascript 文件的方法。但是在 express 3.x 中没有明确的方法可以做到这一点。迁移文档说“使用中间件”。我对“中间件”的概念比较陌生,不知道如何实现。
我想知道的是在我的视图模板中包含 javascript 文件的最优雅的方式。
中间件是建立Express 的Connect的基础。简而言之,它允许您将传入 HTTP 请求和响应的多个处理程序链接在一起。您在 Express 应用程序中提供给每个参数的参数app.use()
基本上是一个“中间件”,并且是具有以下签名的回调function (request, response, next)
,其中next
是链中要调用的下一个中间件回调。以下都是中间件(最后一个是具有 4 个参数签名的错误处理程序):
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(function(err, req, res, next){
// logic
next();
});
就从 Express 2 到 3.x 的迁移而言,迁移具体是:
app.dynamicHelpers(
) (使用中间件 +res.locals
)
因此,通过一个人为的示例,您之前可能在外部js
文件中有一个辅助函数,并将require
其用于您的dynamicHelper
:
//helpers.js
exports.dynamicHelpers = {
currentUser: function(req, res) {
return req.user;
}
};
// app.js
var helpers = require('./helpers').dynamicHelpers;
app.dynamicHelpers(helpers);
通过一些重组,您现在可以执行以下操作:
//locals.js
exports.setLocals = function(req, res, next){ //<- middleware function
res.locals.currentUser = req.user;
res.locals.otherVariable = ...;
next();
}
//app.js
var locals = require('./locals').setLocals;
...
app.use(locals);
这是一篇很好的博客,回顾了中间件与dynamicHelpers
pre-3.x Express 的对比,但概念是相同的。唯一的区别是文章中使用的res.local(name, value)
现在已弃用res.locals.name = value
或res.locals({ name: value })