【问题标题】:koa-views nunjucks: Error: template not found: masterkoa-views nunjucks:错误:找不到模板:master
【发布时间】:2017-06-28 07:19:50
【问题描述】:

结构:

|-server.js
|-views/
    |-master.njk
    |-index.njk

Koa-views 配置:

logit("Koa-views : subfolder used: /views");
var views = views('./views', { //note that I removed the __dirname to test if it was the cause
    extension: 'njk',
    map: {
        njk: 'nunjucks'
    },
    options: {
        helpers: {
            uppercase: (str) => str.toUpperCase(),
            lowercase: (str) => str.toLowerCase(),
        },

    }
});
koa.use(views);

index.njk

{% extends "master" %}
{% block content %}
    <h1>Pretty lame content...</h1>
{% endblock %}

master.njk

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        "Master page here" => {% block content %}{% endblock %}
    </body>
</html>

日志输出:

NodeJS server started, it is running on port 3000

  Template render error: (unknown path)
    Error: template not found: master
      at Object.exports.prettifyError (/srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/lib.js:34:15)
      at /srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/environment.js:489:31
      at eval (eval at _compile (/srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/environment.js:568:24), <anonymous>:9:11)
      at createTemplate (/srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/environment.js:213:25)
      at next (/srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/lib.js:210:13)
      at handle (/srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/environment.js:253:25)
      at /srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/environment.js:264:21
      at next (/srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/lib.js:207:13)
      at Object.exports.asyncIter (/srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/lib.js:214:5)
      at new_cls.getTemplate (/srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/environment.js:243:17)
      at new_cls.root [as rootRenderFunc] (eval at _compile (/srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/environment.js:568:24), <anonymous>:8:5)
      at new_cls.render (/srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/environment.js:482:15)
      at new_cls.renderString (/srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/src/environment.js:328:21)
      at Object.module.exports.renderString (/srv/NodesProjects/AnotherNodeTry/node_modules/nunjucks/index.js:80:14)
      at /srv/NodesProjects/AnotherNodeTry/node_modules/consolidate/lib/consolidate.js:1174:11
      at /srv/NodesProjects/AnotherNodeTry/node_modules/consolidate/lib/consolidate.js:144:5

我确认每个文件都有 chmod 777 和相同的用户。 如果我只替换 1 个变量并尝试使用它的渲染函数传递它。但是包含和扩展似乎关闭了。

我用另一个后端尝试了另一个项目并且它正在工作 - 但我还不够好,无法浏览所有源代码并弄清楚:(

希望回溯更详细,没有完整路径:(

编辑 我忘了,我是这样称呼神殿的

router.get('/', async function (ctx, next) {
    await ctx.render('index', {test: 'Hello'})
})

编辑 2 我尝试使用 koaNunjucks2 lib,当我将 .njk 放在我的扩展末尾时它可以工作,必须与包 koa-views 相关。

【问题讨论】:

  • var views = views('./views' 是一个很奇怪的代码。你真的要覆盖views 函数吗?
  • 随包提供views函数。见koa-views doc。我也在 GitHub 上向他们提出了问题。

标签: node.js koa nunjucks


【解决方案1】:

试试这个。

const Koa = require('koa');
const views = require('koa-views');
const nunjucks = require('nunjucks');
const nunjucksEnvironment = new nunjucks.Environment(
    new nunjucks.FileSystemLoader(path.join(__dirname, './views'))
);

const koa = new Koa();

koa.use(views(path.join(__dirname, './views'), {
    extension: 'njk',
    options: {
        nunjucksEnv: nunjucksEnvironment
    },
    map: { njk: 'nunjucks' }
}));

参考:https://github.com/queckezz/koa-views/blob/6994e23e0f02a83d30b3ab9bea56ae79b37a07fa/test/index.js#L252

【讨论】:

  • 与问题相同的问题,这完全解决了它。
  • 我刚刚发现,将视图文件夹的相对路径传递给 CWD 到 FileSystemLoaderkoa-views 的第一个参数也可以。
【解决方案2】:
const path = require('path');
const Koa = require('koa');
const app = new Koa();
const router = require('./routes/index');
const views = require('koa-views');
app.use(
  views(path.join(__dirname, 'views'), {
    extension: 'njk',
    map: { njk: 'nunjucks' },
    options: { settings: { views: path.join(__dirname, 'views') } }
  })
);

参考:https://github.com/queckezz/koa-views/issues/92

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多