"views"路径和 express.static 中使用的路径有什么区别?



我从来没有使用Express超过一个静态HTML服务器,为WebSocket应用程序提供JavaScript和HTML。我现在非常困惑一些示例代码,我试图去工作。

在我更新了最新Express版本的示例之后,初始化代码看起来像这样:

var methodOverride = require('method-override');
var bodyParser = require('body-parser');
var errorHandler = require('errorhandler');
// One path...
app.set('views', __dirname + '/views');
app.set('view engine', 'pug');
app.use(bodyParser.urlencoded({
  extended: true
}));
app.use(methodOverride());
var path = require ('path');
// Another path
app.use(express.static(path.join(__dirname, '/public')));

我熟悉express.static。这是静态HTML、图像、脚本和其他文件托管的路径。但是另一条路让我很困扰,我不明白那两行:

app.set('views', __dirname + '/views');
app.set('view engine', 'pug'); // Maybe some HTML template parser???

问题是,这实际上会导致错误:

错误:查找视图目录" ... project path .../views "中的"index"失败

我不是在这里只是为了修复错误。我更感兴趣的是知道我的代码是什么意思。谁能给我解释一下,我在做什么?

views不是静态的。当您使用response.render方法时,express将查找提供的模板名称字符串来查找模板,然后解析并发出模板。

如果你的/views/index.pug包含如下内容:

html
  body
    h1= message

你可以创建一个路由:

app.get('/' (req, res) => {
  res.render('index', {message: "hello"});
});

如果你想访问静态目录中的内容,你也可以直接使用该路由。

关于express模板引擎使用的更多信息在这里

最新更新