使用快速路由器时html呈现不显示nunjucks变量

时间:2018-02-28 19:38:35

标签: javascript express nunjucks

答案:我发现data没有传递给nunjucks模板。我在index.njk中将{{data.title}}{{data.sub}}替换为{{title}}{{sub}},现在我的模板呈现了对象变量。谢谢antonmyrberg& petarr。

我正在尝试将一个对象传递给我的nunjucks模板,该对象位于res.render中,正在导出到快速路由器的模块中。当我访问路径时,index.njk呈现但不显示对象属性。

app.js

// -- Create express application --
const express = require('express');
const app = express();

// Require in Express Router
const router = require('./router');

// Require in Nunjucks and configure nujucks to install to Express
const nunjucks = require('nunjucks');
nunjucks.configure('views', {
   express: app
});

// index page
app.use('/', router);

// -- Listen on port 3000 --
app.listen(3000, () => {
  console.log('Listening on Port 3000');
});

路由器/ index.js

const express = require('express');
const router = express.Router();

let index = require('../modules/index.js');

router
 .route('/')
 .get(index.landing);

module.exports = router;

我使用app.js中的app.get运行相同的模板,传递路径并使用位于module.exports.landing中的相同代码,模板渲染时显示的对象中的变量。但我无法使用这种布局。

模块/ index.js

module.exports.landing = (req, res) => {
   console.log('works');
   let data = {
       title: 'Nunjucks',
       sub: 'Using nunjucks'
   } ;
   res.render('index.njk', data);    
}

视图/ index.njk

<body>
    <h1>{{data.title}}</h1>
    <p>{{data.sub}}</p>
</body>

3 个答案:

答案 0 :(得分:1)

Haven自己没有使用Nunjucks,但是我猜测并且说你误解了事情的运作方式。

let data = {
   title: 'Nunjucks',
   sub: 'Using nunjucks'
};
res.render('index.njk', data);

也可以通过返回匿名{}来实现。

res.render('index.njk', {
   title: 'Nunjucks',
   sub: 'Using nunjucks'
});

您对data的引用不会传递给模板,只会传递包含titlesub的对象。您是否尝试过引用{{title}}{{sub}}

答案 1 :(得分:1)

当您调用

时,在视图文件中调用局部变量时,您不需要该数据
res.render('index.njk', data);

相同
res.render('index.njk', {title: 'Nunjucks', sub: 'Using nunjucks'});

所以要回答你,试着在模板中写这个: ```

<body>
    <h1>{{title}}</h1>
    <p>{{sub}}</p>
</body>

```

答案 2 :(得分:0)

我发现data没有传递给nunjucks模板。我在index.njk中将{{data.title}}{{data.sub}}替换为{{title}}{{sub}},现在我的模板呈现了对象变量。