node.js - 使用 Swig 渲染静态文件

标签 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'));

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

最佳答案

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

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"}]});

});

关于node.js - 使用 Swig 渲染静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27867115/

相关文章:

javascript - node.js 监控何时创建文件

regex - Restify 中的通配符路由

node.js - 如何在 swig 模板中创建多行字符串变量?

javascript - 将 swig 添加为 keystoneJS 的模板引擎

javascript - 使用 Node.js 渲染页面时出现 css/js 文件引用错误

node.js - 在Windows 7中使用nodejs构建syntaxhighlighter

Node.js redis "unknown command ' hset'”?

node.js - ejs中的布局 `yield`方法是什么?

javascript - 检查动态路由 express js

node.js - NodeJS Swig 数学