今天早上我花了很多时间来寻找如何做到这一点,并且感到难过。
我正在开发的项目是基于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
请求引发错误:/ login
错误:未找到全局:provision_uri
我已经检查了这个Question但它没有回答我的需要,但我查了环境。添加了全局作为答案。这似乎是我想要的,但它仍然无法奏效。我发现这个question提供了希望。
任何想法都会很棒,我确实有一个解决方法但想学习如何使用它们。
谢谢, 科林
答案 0 :(得分:0)
您不需要在每次渲染调用中创建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
});
}