2016-04-14 14 views
2

私は高速アプリケーションを継承しました。このアプリケーションでは、res.renderに大量の局所変数リストを渡します。すべてのページについて、変化のない約30の変数を渡します。変更がある場合は、十数箇所で変更する必要があります。これは明らかに悪いことです。サーバ側で2つのjsonオブジェクトをマージする

私がしたいことは本当にローカルから離れて変わらない値のローカルを保存することです。だから私は自分のファイルにこれらの非変更値を配置し、各ルートの開始時にファイルをロードし、そのような:

'use strict'; 
var locals = 
{ 
    indexName: 'Home', 
    ...lots more of these... 
}; 
module.exports = { locals : locals }; 


// in each route files 
var local = require('../locals.js'); 

そして、私はまた、追加する必要があるしかし、私はres.render('sensor', local.locals);

を経由して、それを使用することができますページ固有の値。だから私はlocal.locals + { ... };を試してみましたが、エラーを出さないうちに元の値を表示していません。

私はlocal.locals.concat({...})を試しましたが、これはextendpushと同様にエラー(TypeError: Object #<Object> has no method 'concat')を返します。

2つのオブジェクトを拡張またはマージする方法はありませんか?私は自分自身をロールバックする必要がありますか?

また、これはアレイをグローバルにする最良の方法ですか?私はちょうど煩わしいのでlocalsと呼ぶのが好きで、local.localsではないと思う。

+0

'Object.assign' – mostruash

+0

' TypeError:Object#にはメソッド 'assign'もありません。 –

+0

'Object.assign'のドキュメントを見て、パラメータを変更しました。これで' TypeError:Object function Object({{ネイティブコード}}にメソッド 'assign'はありません。私はロダッシュを見ます。 –

答えて

2

@mostruashのObject.assignに加えて、非常に似ている2つのJSライブラリがあります。どちらもオブジェクトマージ機能を備えています(ヘルパーユーティリティも多数あります)。

編集を::1選んで、あなたの2番目の質問に約local.locals ...もちろん、単にオブジェクト自体ではなく、それをラップするオブジェクトをエクスポートします。

module.exports = locals; 

...そして、あなたのルートで:

var locals = require('../locals'); 
console.log(locals.indexName); 
+0

lodashを使用することをお勧めします。出典:https://stackoverflow.com/questions/13789618/differences-between-lodash-and-underscore – christophetd

+0

最後にlodashの 'assign'を使いました。 –

関連する問題