0

サイトの名前、キャッチフレーズなどをカスタマイズする管理パネルがあります。以下のコードは、私がやりたいことを正確に実行しますが、インデックスページに対してのみです:

app.get("/", function (req, res) {
  app.service("customization").find().then(function (result) {
    res.render("index", Object.assign({ layout: "layouts/default" }, result[0]));
  });
});

これをすべてのルート (サイト全体) に適用するにはどうすればよいですか? *の代わりに配置しようとしました/が、それは役に立ちませんでした。

編集:すべてのルートの前にこのコードを置き換え/て配置すると、すべてのページでビューがレンダリングされますが、これは理想的ではありません。とりあえず、このコードをルートごとに複製して、ルートとビューのオプションを変更します。次のようなコードがあります。*index

app.get("/admin/:page", require("connect-ensure-login").ensureLoggedIn("/admin"), function (req, res) {
  app.service("customization").find().then(function (result) {
    res.render("admin/" + req.params.page, Object.assign({ user: req.user, title: "Admin", layout: "layouts/admin" }, result[0]));
  });
});

私が重複しすぎないようにするために、それでも...

4

1 に答える 1

1

*アスタリスクの代わりにワイルドカードとして使用して、すべての URL にルーターを適用できます。

ただし、残りのルーターで非同期の結果を再利用する必要がある場合は、次の方法が適切です。ルーターの前に非同期呼び出しを実行resultし、残りのルーターで を使用します。

app.use(function(req, res, next) {
    app.service("customization").find().then(function (result) {
        app.set('result', result);
        next();
    });
});

これにより、 を使用してサーバー側のどこからでもアクセスできるアプリケーション変数が設定されますapp.get

next()非同期コールバック内の要件に注意してください。アプリケーションはresult次に進む前に を待機し、それなしで次のルーターに移動しないようにします。

app.get("/", function (req, res) {
    res.render("index", Object.assign({ layout: "layouts/default" }, app.get('result')[0]));
});

ルーターでは、必要に応じて変数app.getにアクセスするために使用できます。result

于 2016-04-11T03:49:04.743 に答える