Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Express: разница между app.locals и app.set(), app.get() (https://javascript.ru/forum/node-js-io-js/63754-express-raznica-mezhdu-app-locals-i-app-set-app-get.html)

khusamov 27.06.2016 10:54

Express: разница между app.locals и app.set(), app.get()
 
Какая принципиальная разница между app.locals и app.set(), app.get() в плане хранения каких-либо данных приложения?

destus 27.06.2016 11:11

khusamov,
app.set(key, value) === app.locals.settings[key] = value

т.е. в шаблонах обращение как settings.key, а если так
app.locals.key = value
, то в шаблонах обращаемся просто key

khusamov 27.06.2016 16:31

Спасибо за ответ!

Не ясно, зачем нужно было создавать app.locals.settings со своими методами?..

destus 27.06.2016 16:46

Цитата:

Не ясно, зачем нужно было создавать app.locals.settings со своими методами?..
можно устанавливать важные настройки приложения, такие как env, views, view engine и так далее.
http://expressjs.com/ru/4x/api.html#app.set

khusamov 27.06.2016 16:48

то есть settings это скорее раздел переменных Express-а и его плагинов, а все остальное пользователь сам наполняет как хочет (а точнее все относящееся к сайту например название страницы/сайта)?

хотя они предлагают вот что
app.set('title', 'My Site');
то есть бардак в общем-то))

destus 27.06.2016 16:53

khusamov,
Да, для глобальных переменных, которые можно будет использовать в каждом шаблоне, обычно пишут middleware, где объект response наполняют ими. Например
app.use((req, res, next) => {
    res.locals.flo = baz;
    next()
})

khusamov 28.06.2016 02:23

Нашел новую инфу для размышления.
Оказывается чтобы задать опцию для шаблонизатора достаточно прописать, например, такую команду

app.locals.pretty = true;


Не сказал бы что это логично, но как ни странно, работает...

destus 28.06.2016 05:20

А так работает?
app.set('view options', { pretty: true });


Вообще, на самом деле должно быть что-то типо
if (app.get('env') === 'development') {
  app.locals.pretty = true;
}

khusamov 28.06.2016 17:35

Цитата:

Сообщение от destus (Сообщение 420685)
А так работает?
app.set('view options', { pretty: true });

Не работает. Это для экспресса второй версии работало.
http://stackoverflow.com/questions/5...tml-in-express

Цитата:

Сообщение от destus (Сообщение 420685)
Вообще, на самом деле должно быть что-то типо
if (app.get('env') === 'development') {
  app.locals.pretty = true;
}

Само собой. Я там для примера привел же

.


Часовой пояс GMT +3, время: 11:56.