在Express App中使用Nunjucks

时间:2016-09-30 00:01:37

标签: javascript node.js express

我有一个包含Express的Node应用程序。到目前为止,我一直在使用Swig作为我的视图引擎。我像这样配置了这个视图引擎:

app.engine('html', swig.renderFile);
app.set('views', path.join(__dirname, '../views'));
app.set('view engine', 'html');    

这种方法对我有用。但是,由于Swig已被弃用,我试图转向Nunjucks。为了做到这一点,我做了以下事情:

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

app.engine('html', nunjucks.render);
app.set('views', path.join(__dirname, '../views'));
app.set('view engine', 'html');    

这不起作用。我收到运行时错误,但我无法告诉实际发生了什么错误。在尝试加载最基本的视图时,我尝试加载以下HTML页面:

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
  <h1>Hello</h1>
</body>
</html>

这是一个非常基本的HTML视图,不使用任何模板。我只是希望能够加载一个HTML视图,并将nunjucks设置为视图引擎。即便如此,我仍然会收到错误。

我可以看到render function有一个回调。看起来回调有一个我可以看到的错误对象。但是,我不知道如何在app.engine('html', nunjucks.render);行中实际使用该回调。

非常感谢任何见解

2 个答案:

答案 0 :(得分:4)

删除以下行:

app.engine('html', nunjucks.render);
app.set('views', path.join(__dirname, '../views'));
app.set('view engine', 'html');    

更新代码:

var nunjucks = require('nunjucks');
var app = express();

// looks for html in views folder relative to current working directory
nunjucks.configure('views', {
    autoescape: true,
    cache: false,
    express: app
});

app.get('/', function(req, res) {
    res.render('index.html');
});

答案 1 :(得分:0)

对于带有Nunjucks 3.0.1的Express 4.15.3,我需要以下配置。

// view engine setup
app.set('views', path.join(__dirname, 'views'));
nunjucks.configure('views', {
    autoescape: true,
    cache: false,
    express: app
});
app.set('view engine', 'html');