使用Swig渲染静态文件

时间:2015-01-09 18:41:15

标签: node.js express swig-template

我正在尝试使用NodeJS开发博客。我找到了一个不错的HTML blog theme,并将所有文件放到了 views 文件夹中。这是 app.js

的内容
var express = require('express'),
    app = express(),
    cons = require('consolidate');

app.engine('html', cons.swig);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
//app.use(express.static(__dirname + '/views'));
app.use(express.bodyParser());
// I'm using Express 3, not 4.
app.use(app.router);

app.get('/', function(req,res){
    res.render('index', {menu_items:[{"link":"#","text":"TXT"},{"link":"#","text":"TXT"}]});
});


app.listen(3000);

此代码在index.html中呈现 index.html 并呈现 menu_items 。但是它没有渲染像css和js这样的静态文件。

enter image description here

为了呈现它们,我要评论 app.use(express.static(__ dirname +' / views')); 行。这次它在index.html中渲染静态文件但不渲染 menu_items 变量。 enter image description here

您可以在this repository中查看所有文件。你能告诉我我错过了什么吗?

**更新1 ** 我添加了这些行而不是注释行

app.use('/css', express.static(__dirname + '/views/css'));
app.use('/img', express.static(__dirname + '/views/img'));
app.use('/js', express.static(__dirname + '/views/js'));

但我不确定这是否是解决问题的正确方法。

1 个答案:

答案 0 :(得分:2)

当您将路由字符串设置为“/”时,该模式匹配所有网址请求。并且在'/'之后注册的处理程序被忽略。所以,你需要先添加行,

app.use('/css', express.static(__dirname + '/views/css'));
app.use('/img', express.static(__dirname + '/views/img'));
app.use('/js', express.static(__dirname + '/views/js'));

然后在最后添加此路由器,

app.get('/', function(req,res){
res.render('index', {menu_items:[{"link":"#","text":"TXT"},{"link":"#","text":"TXT"}]});

});