html 使用 express router 时渲染不显示 nunjucks 变量

html rendering not displaying nunjucks variables when using express router

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

我正在尝试将一个对象传递到我的 nunjucks 模板,该对象位于 res.render 正在导出到 express 路由器的模块中。当我访问路线时,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');
});

router/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中的相同代码,显示对象中的变量模板呈现时。但是我无法使用此布局。

modules/index.js

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

views/index.njk

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

我自己没有使用过 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}}

在视图文件中调用局部变量时不需要该数据,当您调用

res.render('index.njk', data);

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

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

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

```

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