Вот как я решил эту проблему (используя производную MEAN)
Мои переменные:
{
NODE_ENV : development,
...
ui_varables {
var1: one,
var2: two
}
}
Сначала я должен был убедиться, что необходимые переменные конфигурации были переданы.MEAN использует пакет node nconf и по умолчанию настроен на ограничение того, какие переменные передаются из среды.Мне пришлось исправить это:
config / config.js:
оригинал:
nconf.argv()
.env(['PORT', 'NODE_ENV', 'FORCE_DB_SYNC'] ) // Load only these environment variables
.defaults({
store: {
NODE_ENV: 'development'
}
});
после изменений:
nconf.argv()
.env('__') // Load ALL environment variables
// double-underscore replaces : as a way to denote hierarchy
.defaults({
store: {
NODE_ENV: 'development'
}
});
Теперь я могу установить свои переменные следующим образом:
export ui_varables__var1=first-value
export ui_varables__var2=second-value
Примечание: я сбросил «индикатор иерархии» на «__» (двойное подчеркивание), потому что его значение по умолчанию было «:», что делает переменные болеетрудно установить из Баш.Смотрите еще один пост в этой теме.
Теперь часть нефрита: Далее необходимо отобразить значения, чтобы javascript мог подобрать их на стороне клиента.Простой способ записать эти значения в индексный файл.Поскольку это одностраничное приложение (угловое), эта страница всегда загружается первой.Я думаю, что в идеале это должен быть включаемый файл javascript (просто, чтобы сохранить чистоту), но это хорошо для демонстрации.
app / controllers / index.js:
'use strict';
var config = require('../../config/config');
exports.render = function(req, res) {
res.render('index', {
user: req.user ? JSON.stringify(req.user) : "null",
//new lines follow:
config_defaults : {
ui_defaults: JSON.stringify(config.configwriter_ui).replace(/<\//g, '<\\/') //NOTE: the replace is xss prevention
}
});
};
app / views / index.jade:
extends layouts/default
block content
section(ui-view)
script(type="text/javascript").
window.user = !{user};
//new line here
defaults = !{config_defaults.ui_defaults};
В моем рендеринге html это дает мне симпатичный маленький скрипт:
<script type="text/javascript">
window.user = null;
defaults = {"var1":"first-value","var2:"second-value"};
</script>
С этого момента легко использовать код.