Установка / доступ к глобальным переменным Nunjucks в проекте NodeJS / KeystoneJS - PullRequest
0 голосов
/ 17 мая 2018

Я провел все это утро в поисках того, как это сделать, и пришел в тупик.

Проект, над которым я работаю, основан на KeystoneJS / NodeJS.Он использует Nunjucks, с которым у меня есть только несколько дней базового опыта.

Моя проблема в том, что после загрузки конфигурационных переменных, которые устанавливают URI / порты служб, я хочу установить их как Nunjucksпеременные, поэтому в html-представлениях я могу использовать их в качестве местоположений src.

Я не могу поделиться всем кодом здесь, так как я работаю над проектом правительства (Великобритания), но, надеюсь, этого достаточно.

Keystone.js

// Require keystone
var keystone = require('keystone');
var cons = require('consolidate');
var nunjucks = require('nunjucks');
var env = new nunjucks.Environment(null);

env.addGlobal('provision_uri', 3);

Первоначально загружается после маршрутизации вызовов:

Login.js

var keystone = require('keystone');
var nunjucks = require('nunjucks');

exports = module.exports = function (req, res) {

    var view = new keystone.View(req, res);
    var locals = res.locals;

    // locals.section is used to set the currently selected
    // item in the header navigation.
    locals.section = 'home';

    var env = new nunjucks.Environment(null);
    var provision_uri = env.getGlobal('provision_uri',3);

    console.log(`Uri ${provision_uri}`); **<-- ERRORS HERE**

    // Render the view
    view.render('login', {
        title: 'User Login',
        description: 'Login to your Account',
        provision_uri: provision_uri
    });
};

Login.html

<br>
<form action="{{provision_uri}}/session" method="post" name="user">
<div class="container">

Когда я запускаю проект, целевая страница загружается, нажимаю на страницу входа и в консоли я получаю:

GET / provision / 304 74.147 ms

Ошибка для запроса: / логин

Ошибка: глобальная не найдена: provision_uri

Я проверил Вопрос , однако он не отвечаетчто мне нужно но я посмотрел environment.addGlobal в качестве ответа.Казалось, это то, что я хотел, но все равно это не сработало.Я нашел этот вопрос , который давал надежду.

Любые идеи были бы хорошими, у меня есть обходной путь, но я хотел бы узнать, как их использовать.

СпасибоКолин

1 Ответ

0 голосов
/ 18 мая 2018

Вам не нужно создавать новый экземпляр среды nunjucks при каждом вызове рендеринга. Новая область (среда) имеет пустое глобальное пространство.

var nunjucks = require('nunjucks');
var env = new nunjucks.Environment(null);
env.addGlobal('provision_uri', 3);
...
exports = module.exports = function (req, res) {
    ...
    var provision_uri = env.getGlobal('provision_uri',3);
    console.log(provision_uri);

    view.render('login', {
        title: 'User Login',
        description: 'Login to your Account',
        // provision_uri: provision_uri // it's not necessary
    });
} 
...