84

わかりました、 Jekyllを使用してブログを_config.yml作成しました。すべてのテンプレート/レイアウトでアクセス可能なファイルに変数を定義できます。私は現在、Node.JS / ExpressEJSテンプレートとejs-locals (パーシャル/レイアウト用) で使用しています。誰かが Jekyll に精通している場合site.titleに見られるようなグローバル変数に似たものを探しています。私は次のような変数を持っています_config.ymlサイトのタイトル (ページ タイトルではなく)、著者/会社名。すべてのページで同じままです。

これが私が現在行っていることの例です。

exports.index = function(req, res){
    res.render('index', { 
        siteTitle: 'My Website Title',
        pageTitle: 'The Root Splash Page',
        author: 'Cory Gross',
        description: 'My app description',
        indexSpecificData: someData
    });
};

exports.home = function (req, res) {
    res.render('home', {
        siteTitle: 'My Website Title',
        pageTitle: 'The Home Page',
        author: 'Cory Gross',
        description: 'My app description',
        homeSpecificData: someOtherData
    });
};

サイトのタイトル、説明、作成者などの変数を 1 か所で定義し、EJS を介してレイアウト/テンプレートでアクセスできるようにしたいと考えていますres.render。これを行う方法はありますが、各ページに固有の他の変数を渡すことはできますか?

4

8 に答える 8

19

Express 4.0 の場合、アプリケーション レベルの変数を使用すると動作が少し異なることがわかりました。Cory の回答はうまくいきませんでした。

ドキュメントから: http://expressjs.com/en/api.html#app.locals

アプリのグローバル変数を宣言できることがわかりました

app.locals

例えば

app.locals.baseUrl = "http://www.google.com"

そして、アプリケーションではこれらの変数にアクセスでき、エクスプレスミドルウェアでは req オブジェクトで次のようにアクセスできます。

req.app.locals.baseUrl

例えば

console.log(req.app.locals.baseUrl)
//prints out http://www.google.com
于 2016-03-18T05:08:17.133 に答える
-1

グローバル スコープが汚染されないようにするために私が行っていることは、どこにでも含めることができるスクリプトを作成することです。

// my-script.js
const ActionsOverTime = require('@bigteam/node-aot').ActionsOverTime;
const config = require('../../config/config').actionsOverTime;
let aotInstance;

(function () {
  if (!aotInstance) {
    console.log('Create new aot instance');
    aotInstance = ActionsOverTime.createActionOverTimeEmitter(config);
  }
})();

exports = aotInstance;

これを行うと、新しいインスタンスが一度だけ作成され、ファイルが含まれているすべての場所で共有されます。変数がキャッシュされているためなのか、それともアプリケーションの内部参照メカニズム (キャッシュを含む可能性がある) によるものなのかはわかりません。ノードがこれをどのように解決するかについてのコメントは素晴らしいでしょう。

require がどのように機能するかについての要点を得るために、これも読んでください: http://fredkschott.com/post/2014/06/require-and-the-module-system/

于 2017-07-26T11:46:29.497 に答える