通过 consolidate.js 获取 Node.js Express 3.x 模板继承与 Swig 一起使用的问题
Posted
技术标签:
【中文标题】通过 consolidate.js 获取 Node.js Express 3.x 模板继承与 Swig 一起使用的问题【英文标题】:Issue getting Node.js Express 3.x template inheritance working with Swig via consolidate.js 【发布时间】:2012-10-12 05:52:31 【问题描述】:我可以使用此代码获得“独立”模板以很好地呈现,但我无法让模板继承工作。有没有我忽略的东西或任何其他人知道的警告?
错误:在“... /views/index.html”的第 3 行发现循环扩展!
app.js:
var express = require('express')
, cons = require('consolidate')
, http = require('http')
var app = express();
app.engine('html', cons.swig);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
app.set('view options', layout: false );
app.get('/', function(req, res)
res.render('index.html', header: 'Express' );
);
http.createServer(app).listen(3000, function()
console.log("Express server listening on port 3000");
);
index.html
% extends 'base.html' %
% block content %<h1> header </h1>% endblock %
base.html
<!DOCTYPE html>
<html>
<head>
<title>% block title %Express% endblock %</title>
</head>
<body>
% block content %% endblock %
</body>
</html>
【问题讨论】:
【参考方案1】:您可以通过为swig
本身设置root
和allowErrors
来解决此问题:
var express = require('express')
, cons = require('consolidate')
, http = require('http')
, swig = require('swig')
swig.init( root: __dirname + '/views', allowErrors: true );
// ...
有关详细信息,请参阅Using Swig with express.js 和 Swig API。
【讨论】:
做到了!我一直在寻找术语“表达”和“继承”的问题,但没有运气。谢谢!【参考方案2】:我不确定 swig,但在 express3 中,他们删除了模板继承、部分和布局,并将其留给模板引擎来实现。有些插件可能会为您找回它。
ejs:https://github.com/RandomEtc/ejs-locals
https://github.com/publicclass/express-partials
【讨论】:
根据 Swig 文档,支持模板继承:github.com/paularmstrong/swig/blob/master/docs/inheritance.md 我试过了,但我得到一个循环引用:错误:循环扩展在“/var/www/express-template-demo/demo/views/index.swig”的第 2 行找到 这可能会有所帮助,示例使用 swig:github.com/visionmedia/consolidate.js以上是关于通过 consolidate.js 获取 Node.js Express 3.x 模板继承与 Swig 一起使用的问题的主要内容,如果未能解决你的问题,请参考以下文章