如何使用Express 4渲染Swig模板?

4

我无法在Node Express中使用Swig模板。我遇到了以下错误:

Error: Failed to lookup view "index" in views directory

Swig模板没有被编译成.html文件。
以下是我的代码:
var express = require('express');
var cons = require('consolidate');
var swig = require('swig');
var app = express();

//Set template engine
app.engine('html', cons.swig);
app.set('view engine', 'html');
app.set('views', __dirname + '/views')


// Disable Express's and Swig Cache
app.set('view cache', false);
swig.setDefaults({ cache: false });

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

app.listen(3000);

你不想重命名你的模板吗? - Matteo
如果您创建文件views/index.html,您的代码将正常工作。 - Matteo
是的,我想使用SWIG模板。Swig应该将index.swig编译为index.html,这应该可以正常工作。问题在于index.swig没有被编译。 - Vaibhav K
抱歉,我对这门语言还比较新,但是我找不到编译 SWIG 页面的任何参考资料。 - Matteo
你能发布index.swig文件吗?你试过简单地将它重命名为index.html吗? - Matteo
显示剩余4条评论
4个回答

3
我之前也遇到了类似的问题。如果要使用swig模板和扩展,可以按照swig文档中的说明,并将以下两行代码替换为 app.engine('swig', swig.renderFile); app.set('view engine', 'html'); 即可正常工作。 应该看起来像这样:

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

// view engine setup
// This is where all the magic happens!
app.engine('swig', swig.renderFile);
app.set('view engine', 'swig');
app.set('views', path.join(__dirname, 'views'));
app.set('view cache', false);
swig.setDefaults({ cache: false });

Expressjs 4.x 文档 app.engine app.engine(应用引擎)接收扩展名和回调函数。因此,所有使用 swig 扩展名的文件都有一个 swig.renderFile 回调函数。每个文件都将生成为 HTML。

Expressjs 4.x 文档 app.setview engine 设置为 swig,即设置默认引擎扩展名,当省略时使用。我们还指定了所有视图都可以在 /blaha/blaha/blah/views 目录中找到。

注意:所有视图目录中的文件都必须以 .swig 结尾。因此,请牢记,当“包含”或引用另一个模板时,必须在路径中放置文件名和扩展名,例如:layout.swig。希望这能让您的项目正常运行。


2

0

对于最新版本的swig,我们需要包含swig包,该包需要通过包管理器或package.json文件进行安装。

var express = require('express');

var swig = require('swig');

var app = express();

// 在这里,我们需要根据最新版本的swig设置引擎 // 对于最新版本的swig,我们需要包含swig包,该包需要通过包管理器或package.json文件进行安装。

app.engine('swig', swig.renderFile);

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

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

app.set('view cache', false);

swig.setDefaults({ cache: false }); // 这里我们将缓存默认设置为false。

`


0

是的,我认为如果您使用 SWIG 作为模板引擎,将模板存储为 .swig 文件会更具语义化。所以,您只需要将引擎设置为 'swig' 就可以了:

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

然后你可以将你的视图存储在 ./views/layout.swig 中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接