首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Express 4中使用Nunjucks

在Express 4中使用Nunjucks
EN

Stack Overflow用户
提问于 2015-03-09 22:33:37
回答 5查看 11.6K关注 0票数 9

我正在尝试从Express中使用Nunjucks作为模板引擎。我这样做了:

代码语言:javascript
复制
var express = require('express');
var nunjucks = require('nunjucks');
var path = require('path');
var bodyParser = require('body-parser');
var load = require('express-load');
var fs = require("fs");

var app = express();
app.set('views', path.join(__dirname, 'views'));

var env = nunjucks.configure(app.get('views'), {
    autoescape: true,
    express:    app 
});

app.set('view engine', 'html');

但是上面的代码给出了这个错误:

代码语言:javascript
复制
Template render error: compileExtends: cannot extend multiple times
   at Error.exports.TemplateError (C:\my\nodejs\projects\\node_modules\nunjucks\src\lib.js:49:19)
   at Object.extend.fail (C:\my\nodejs\projects\\node_modules\nunjucks\src\compiler.js:49:15)
   at Object.extend.compileExtends (C:\my\nodejs\projects\\node_modules\nunjucks\src\compiler.js:983:18)
   at Object.extend.compile (C:\my\nodejs\projects\\node_modules\nunjucks\src\compiler.js:1083:22)
   at Object.extend._compileChildren (C:\my\nodejs\projects\\node_modules\nunjucks\src\compiler.js:139:18)
   at Object.extend.compileRoot (C:\my\nodejs\projects\\node_modules\nunjucks\src\compiler.js:1050:14)
   at Object.extend.compile (C:\my\nodejs\projects\\node_modules\nunjucks\src\compiler.js:1083:22)
   at Object.module.exports.compile (C:\my\nodejs\projects\\node_modules\nunjucks\src\compiler.js:1118:11)
   at Obj.extend._compile (C:\my\nodejs\projects\\node_modules\nunjucks\src\environment.js:414:35)
   at Obj.extend.compile (C:\my\nodejs\projects\\node_modules\nunjucks\src\environment.js:403:18) 

请告诉我怎么解决这个问题?

EN

回答 5

Stack Overflow用户

发布于 2015-03-28 23:42:59

我是这样使用的:

代码语言:javascript
复制
nunjucks.configure('views', {
    express: app,
    autoescape: true
});
app.set('view engine', 'html');

对我很有帮助。从双节棍网站上获得:https://mozilla.github.io/nunjucks/getting-started.html

票数 15
EN

Stack Overflow用户

发布于 2018-09-14 15:11:24

我想添加我的解决方案。我遇到了同样的问题,因为express生成器不支持双节棍模板引擎。如前所述,您应该导入expressnunjucks依赖项,然后配置nunjucks

代码语言:javascript
复制
const app = express();
const nunjucks = require('nunjucks');
nunjucks.configure('views', {
  autoescape: true,
  express: app
});

接下来,您需要决定如何呈现模板。您可以选择通过呈现简单的字符串或文件来响应HTTP请求。然而,假设你的项目在某一时刻可能会增长,我认为最好是利用express提供的路由和中间件。使用express生成器,express提供了两个文件夹:viewsroutes。在app.js文件中有两种用于响应传入请求的方法。

代码语言:javascript
复制
app.use('/', indexRouter);
app.use('/users', usersRouter);

其中,indexRouter和usersRouter的定义如下:

代码语言:javascript
复制
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');

这告诉我们,当一个"/“请求进来时,用routes文件夹中的index.js文件来处理它。以同样的方式,当"/users“请求进入时,使用routes文件夹中的users.js文件来处理它。因为我们只是尝试实现双节棍模板引擎,所以我们可以让这些行保持原样。必须了解的是,routes文件夹中的index.js文件将利用express Router,准备响应,并在views文件夹中呈现一个同名文件。这意味着我们需要在views文件夹中创建一个名为index的文件,以便名称匹配。

Nunjucks社区的惯例是使用njk扩展。因此,我们将使用index.njk作为根页面的名称。最后,我们需要让express知道它应该期待njk扩展。这是因为njk扩展只是一种约定。我们可以很容易地使用.html,只要我们配置了nunjucks,并告诉express期待html。在app.js

代码语言:javascript
复制
app.set('view engine', 'njk');

现在我们可以使用nunjucks模板引擎,它将被编译成HTML。我建议创建一个布局文件并使用nunjucks {% block content %} code-goes here {% endblock %}来创建可重用的组件,这些组件可以通过Nunjuck的模板继承来继承,例如{% extends "layout.njk" %}

Nunjucks是一个非常强大的模板引擎,具有一组强大的功能。在我看来,它是最被低估的模板引擎。它易于使用,非常强大,并且可扩展。

关于模板继承的更多信息,这是一个很有帮助的链接,来自jinja2,双节棍就是从它移植过来的,click me

如果你想看看我在Express4、Nunjucks和Winston上设置的用于日志记录的示例应用程序,你可以在我的GitHub上找到它。

票数 8
EN

Stack Overflow用户

发布于 2018-04-21 05:02:35

这类似于使用express js的基本配置,您可以这样做:

代码语言:javascript
复制
const express = require('express');
const nunjucks = require('nunjucks');
const app = express();

nunjucks.configure('views',{
    autoescape:true,
    express:app
});

app.set('views','./views'); // <--Path to your views folder

app.get('/',(request,response)=>{
    response.render('some-view.html');
});

有关更多参考资料,请参阅official documentation

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28944582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档