3

私が見ているすべての例では、 を使用しapp.dynamicHelpersて、ビュー テンプレート内の JavaScript ファイルにアクセスする方法を提供しています。しかし、express 3.x では、これを行う明確な方法はありません。移行ドキュメントには、「ミドルウェアを使用する」と書かれています。私は「ミドルウェア」の概念に比較的慣れておらず、これを実装する方法がわかりません。

私が知りたいのは、ビュー テンプレートに JavaScript ファイルを含める最もエレガントな方法です。

4

1 に答える 1

2

ミドルウェアはConnectの基盤であり、Express はその上に構築されています。つまり、着信 HTTP 要求と応答の複数のハンドラーを連鎖させることができます。app.use()Express アプリケーションでそれぞれに指定する引数は、基本的に「ミドルウェア」であり、次のシグネチャを持つコールバックです。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それを d で使用した可能性がある、不自然な例を使用します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);

これは、ミドルウェアと 3.x 以前の Expressのレビューを掲載した優れたブログですが、概念は同じです。記事dynamicHelpersで使用されている唯一の違い、またはres.local(name, value)res.locals.name = valueres.locals({ name: value })

于 2012-08-15T22:17:03.347 に答える