【问题标题】:Why does my swig template not render in my MEAN web app?为什么我的 swig 模板没有在我的 MEAN Web 应用程序中呈现?
【发布时间】:2014-07-03 22:32:13
【问题描述】:

我正在努力学习 the MEAN stackSwig templates。我正在从头开始编码,因为我尝试了一个 MEAN 框架,但它生成了很多文件,而且对我来说太多了。

目前我的 Swig 模板 index.html 不呈现 HTML。这是我得到的输出:

{% include 'header.html' %} 
<br>Welcome to my test website

正如我所期望的那样

This is coming from Header
<br>Welcome to my test website

为什么不渲染?

以下是我的文件夹结构:

--config
 -config.js
--node_modules
 -* //modules installed via npm link
--public
 -header.html
 -index.html
-package.json
-routes.js
-server.js

下面是每个文件的内容

config.js

var port = process.env.PORT || 8080;

module.exports = {
    dburl: 'mongodb://localhost/test',
    port: port,
    templateEngine: 'swig'
}

header.html

<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<p> This is coming from Header</p>

index.html

{% include 'header.html' %}
<p>Welcome to my test website</p>
</body>

package.json

{
    "name": "test",
    "version": "0.0.1",
    "author": "Rukmaj Chandavar",
    "dependencies": {
        "express": "*",
        "mongoose": "*",
        "angular": "*",
        "swig": "*",
        "consolidate": "*"
    }
}

routes.js

module.exports = function(app){
    app.get('*',function(req, res){
        res.send('index.html');
    });
}

server.js

var express = require("express");
var app = express();
var mongoose = require("mongoose");
var config = require('./config/config');
var swig = require('swig');
var cons = require('consolidate');

mongoose.connect(config.dburl);

app.use(express.static(__dirname + '/public'));

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


require('./routes') (app);

app.listen(config.port);
console.log('MeriDawat running on port ' + config.port)

以下是已安装节点模块的版本号

angular@1.2.18
consolidate@0.10.0
express@4.4.3
mongoose@3.8.12
passport@0.2.0
swig@1.3.2

如果能帮助我解决此问题以帮助我继续前进,我将不胜感激。提前致谢。

【问题讨论】:

  • 你提到mean init——你在用mean.io吗?
  • 不,我不在这个例子中,但是当我早些时候使用它时,它会生成很多对我来说太多的文件。所以我从头开始做一个简单的项目。
  • 那么您使用的是什么 来提供mean init 命令?
  • 这个问题不是关于mean init,而是关于无法使用node 和express 渲染swig 模板。这只是一个背景信息,与 mean.io 没有任何关系
  • 啊,我明白了。我已经编辑了你的问题,希望能更清楚。

标签: node.js express swig-template


【解决方案1】:

我认为这是在 routes.js 中的违规行:

res.send('index.html');

res.send() 只是在 HTTP 响应中发回文件的内容。

要渲染模板并将渲染结果发回,您需要res.render()

res.render('index.html')

【讨论】:

  • 我以前试过这个,又试了一次,结果还是一样。
  • 似乎错误出现在其他地方,因为我尝试评论响应行本身,即res.send('index.html') 以及 server.js 中与视图相对应的行,但结果仍然相同。看起来应用程序正在从其他地方读取或考虑 /public 作为文档根并呈现 index.html。无论如何,问题仍然存在。指出错误代码行的任何帮助都会很棒
  • 看来错误是app.use(express.static(__dirname + '/public')); 评论了这一行,一切正常。现在我进一步尝试在 header.html 中插入样式表的链接,但是它没有被加载。所以,现在静态文件夹坏了,谁能帮我解决这个问题
  • @Rukmaj:啊哈!是的当然。您的模板不应保存在您传递给express.static 的文件夹中。该文件夹仅用于存放应从您的应用直接提供给最终用户的文件。
  • @Rukmaj:“现在我正在尝试在 header.html 中插入样式表的链接,但是它没有被加载。所以,现在静态文件夹坏了,谁能帮我解决这个问题”。是的——再问一个问题!
猜你喜欢
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 2019-08-09
  • 1970-01-01
相关资源
最近更新 更多