2016-04-14 3 views
2

У меня есть унаследованное приложение. В приложении мы переходим к res.render массивному списку локальных переменных. Для каждой страницы мы передаем около 30 переменных, которые не меняются. Если это нужно изменить, его нужно изменить в десятке мест. Очевидно, это плохо.Слияние двух json-объектов на стороне сервера

Так что я хочу хранить значения locals, которые не меняются отдельно от действительно локального. Так что я поместил эти без изменения значений в их собственном файле и загрузить файл в начале каждого маршрута, например, так:

'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'), также для extend и push.

Не существует способов расширения или слияния двух объектов? Нужно ли мне кататься?

Кроме того, это лучший способ сделать массив глобальным? Я бы предпочел просто называть его locals, а не local.locals, поскольку это просто громоздко.

+0

'Object.assign' – mostruash

+0

Я получаю' TypeError: Object # не имеет метода 'assign'' для этого тоже. –

+0

После просмотра документации 'Object.assign' я изменил параметры и теперь получаю' TypeError: Object function Object() {[native code]} не имеет метода 'assign''. Я посмотрю на lodash. –

ответ

2

В дополнение к Object.assign от @mostruash существуют две библиотеки JS, которые очень похожи, что обеспечивает функцию объединения объектов (наряду с множеством хороших вспомогательных утилит). Выберите один:

Edit: и, как на ваш второй вопрос о 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'. –