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

时间:2016-11-08 21:37:21

标签: javascript node.js express

我从未使用过Express而不是为WebSocket应用程序提供JavaScript和HTML的静态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”

我不是为了解决这个错误。我更感兴趣的是知道我所说的代码是什么意思。任何人都可以向我解释,我在做什么?

1 个答案:

答案 0 :(得分:1)

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

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

html
  body
    h1= message

您可以创建路线:

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

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

More information about express template engine usage is here