2015-02-20 3 views
2

Ive приложение nodejs с express-handlebars, и я хочу определить переменную для таких вещей, как адрес «хоста» для CSS и Javascript, которые в настоящее время импортируются в файл header.hbs, который я вызываю в конкретном макете.Каков наилучший способ передачи глобальных конфигурационных переменных в шаблон handlebars?

Ive создал config.js файл, который имеет ряд переменных, я хочу, чтобы установить и ив импортирован, что в app.js с помощью:

var config = require('./config.js'); 

но Im потерянную т, куда идти. например, я был thinkging, если я могу, как некоторые делаю что-то вроде этого:

<link href="{{config.csshost}}basev1.css" rel="stylesheet" type="text/css" /> 

Может кто-нибудь предоставить некоторые указатели, я озадачен, кроме объявить эти переменные каждый раз, когда я загрузить шаблон.

ответ

3

Вы бы установить приложение местных жителей:

var app = express() 

app.locals = { 
    config: config, 
    templateVar: 'test' 
} 

Edit:

Ваши маршруты будут выглядеть примерно так:

app.get('/', function(req, res) { 
    res.render('index', {config: config}); 
}) 

Что это делает, затем обновить приложение. местные жители переменная в выражении выглядит так:

app.locals = { 
    config: config 
} 

Все app.local переменных затем доступны в шаблонах через:

{{config}} 

//which is really 
app.locals['config'] 

Итак, в вашем app.js где настроенном выразить вы могли бы сделать это:

var app = express(); 

app.locals.config = require('./config') 

app.get('/', function(req, res) { 
    return res.render('index') 
}) 
+0

спасибо, но я не уверен, как интерпретировать выше? не могли бы вы объяснить, что это делает и как я буду вводить эти vars в макет? –

+0

Это все, что вам нужно. При рендеринге шаблона и передаче его переменных все это обновляет app.locals, которые затем передают их в область вашего шаблона. – sctskw

2

(Это должен быть комментарий к sctskw's answer выше, но у меня недостаточно репутации, чтобы сделать это.)

Вместо того, чтобы переписывать app.locals с новым объектом, было бы лучше, чтобы добавить новые свойства к существующему, например:

app.locals.config = config; 
app.locals.templateVar = 'test'; 

Причина заключается в том, что экспресс использует app.locals внутренне. Overwriting это потеряет некоторые полезные переменные Express. Например, мы могли бы использовать settings.env для определения текущей рабочей среды в шаблоне представления, который определяется как app.locals.settings.env Express.

Смежные вопросы