2016-04-14 51 views
2

我已經繼承了一個快速應用程序。在應用程序中,我們傳遞給res.render一個龐大的局部變量列表。對於每個頁面,我們傳遞大約30個不變的變量。如果一個人改變了,就需要在十幾個地方改變它。這顯然是不好的。合併服務器端的兩個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({...}),但確實給出了一個錯誤(TypeError: Object #<Object> has no method 'concat'),extendpush也是如此。

是否沒有方法來擴展或合併兩個對象?我需要推出自己的?

此外,這是使數組全球最好的方法嗎?我寧願將它稱爲locals,而不是local.locals,因爲這只是麻煩。

+0

'Object.assign' – mostruash

+0

我得到了'TypeError:Object#也沒有'assign'的方法。 –

+0

查看Object.assign文檔後,我改變了參數,現在我得到了TypeError:Object function Object(){[native code]}沒有方法'assign'。我會看看lodash。 –

回答

2

除了來自@mostruash的Object.assign,還有兩個非常相似的JS庫,它們都提供對象合併功能(以及許多不錯的幫助工具)。選擇一個:

編輯:和你的第二個問題關於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'。 –