3

我看到的所有示例都使用app.dynamicHelpers提供了一种在我的视图模板中访问我的 javascript 文件的方法。但是在 express 3.x 中没有明确的方法可以做到这一点。迁移文档说“使用中间件”。我对“中间件”的概念比较陌生,不知道如何实现。

我想知道的是在我的视图模板中包含 javascript 文件的最优雅的方式。

4

1 回答 1

2

中间件是建立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);

这是一篇很好的博客,回顾了中间件与dynamicHelperspre-3.x Express 的对比,但概念是相同的。唯一的区别是文章中使用的res.local(name, value)现在已弃用res.locals.name = valueres.locals({ name: value })

于 2012-08-15T22:17:03.347 回答