22

私はExpressを学習している最中であり、構成スタイルのデータを保存するのに最適な場所を考えています。使用可能なオプションは、app.localsまたはapp.set(設定)のいずれかにあります...したがって、

app.locals({ config: {
    name: 'My App',
    domain: 'myapp.com',
    viewPath: __dirname+'/views',
    viewEngine: 'jade'
    port: 3000
} });

app.set('view engine', app.locals.config.viewEngine || 'jade');

これにより、ビューで次を使用することもできます。

<title>#{config.name}</title> // <title>My App</title>

または、次のようにapp.setを使用することもできます。

app.set('name', 'My App');
app.set('domain', 'myapp.com');

...そしてビューでこれを使用します:

<title>#{settings.name}</title>

私は両方の方法が機能することを知っていますが、どちらを使用するのが良いかを判断するのに苦労しています。現時点では、app.setを使用すると、将来の更新や他のモジュールと競合する可能性が低くなると考えているため、追加の「app」名前空間を使用してapp.localsを使用することに傾倒しています。

4

4 に答える 4

17

うわー、すべての答えが間違っているので、試してみましょう。他の人が言うことにもかかわらず、app.local引数を割り当てることは、app.set()を使用することとは異なります。時計、

app.js
  app.locals.foo = 'bar';
  app.set('baz', 'quz');  


index.jade
  block content                            
    dl                                     
      dt app.locals.foo = 'bar';            
      dd \#{settings.foo} = #{settings.foo}
      dd \#{foo} = #{foo}                  

      dt app.set('baz', 'quz')             
      dd \#{settings.baz} = #{settings.baz}
      dd \#{baz} = #{baz}

このコードを実行すると、次のように表示されます。

app.locals.foo = 'bar';
  #{settings.foo} =
  #{foo} = bar
app.set('baz', 'quz')
  #{settings.baz} = quz
  #{baz} =

app.localsこれは、ビューが環境として使用するオブジェクトの属性を設定するためです。ビューが修飾なしで何から読み取るか。逆に、app.setはに属性を設定しますapp.locals.settingsapp.locals.settings上記でapp.locals.settings = {}、を使用してclobberを実行すると、これを確認できます。これにより、#{settings.baz}未定義になります。

では、どちらを使用しますか?res.set応答( )またはグローバル構成( )に基づくアプリ設定でない場合は、app.setへの直接書き込みを使用しapp.localsます。

于 2013-12-18T09:17:57.413 に答える
4

のすべてのプロパティはapp.localsテンプレートで利用できます。を使用すると、app.setプロパティがに割り当てapp.locals.settingsられます。これは、グローバルアプリケーション設定に使用され、マウントされたアプリケーションに継承されます。例えば:

var app1 = express(),
    app2 = express();

app1.set('inheritable', 'foo');
app1.locals.notInheritable = 'bar';

app1.use('/mount', app2);

app2.get('inheritable') === 'foo'; // true
app2.locals.notInheritable === 'bar'; // false

したがって、それは本当に好みの問題であり、アプリケーションをマウントしているかどうかの問題です。

于 2014-08-27T15:50:11.857 に答える
2

エクスプレスAPIリファレンスによると:

デフォルトでは、Expressは単一のアプリレベルのローカル変数である設定のみを公開します。

どちらの方法でも問題ありません。

app.locals.title = 'My App';

app.set('title', 'My App');
// use settings.title in a view
于 2013-03-05T13:12:18.213 に答える
0

多くの人が実際にapp.setの代わりにローカルを使用しているので、私のアドバイスはそれを使用することです。

于 2012-08-09T15:04:50.737 に答える