通过 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 本身设置rootallowErrors 来解决此问题:

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 一起使用的问题的主要内容,如果未能解决你的问题,请参考以下文章

k8s 通过node节点获取资源信息

通过node.js从mongodb获取数据

通过node.js从mongodb获取数据

通过 async/await 从 Node 中的 redis 同步获取

通过ini设置获取节点

重复参数通过 node.js express 或 vue 路由器获取数组