问题描述
我是node.js的新手。我的笔记本电脑上运行了以下名为app.js的程序
var express = require('express');
var engine = require('consolidate');
var app = express();
app.set('views',__dirname);
app.engine('html',engine.mustache);
app.set('view engine','html');
app.use(express.static('.'));
app.get('/',function(req,res) {
console.log("Got request for index.html");
res.render('index.html');
});
app.listen(5000,'0.0.0.0');
,我在与app.js相同的路径中有index.html。当我尝试从浏览器或邮递员访问localhost:5000时,得到的是index.html作为响应。我以为app.get()将被调用,并且将显示日志“对index.html的请求”。但是没有调用该函数。我知道.get()用于路由。
我不确定如果app.js中的get()没有被点击,浏览器/邮递员如何获得index.html作为响应。有人可以帮我理解即使没有调用app.get()邮递员如何获得响应。
解决方法
快速中间件按顺序应用。 express.static
如果在文件上匹配,则不会调用链中的下一个中间件-它仅提供文件并结束响应。因此,因为index.html在您的静态文件目录中,所以意味着永远不会调用app.get中间件。
通常,您会为静态资产创建一个公用文件夹,并为HTML视图创建一个views文件夹。
类似:
const {join} = require('path');
app.set('views',join(__dirname,'/views'));
app.engine('html',engine.mustache);
app.set('view engine','mustache');
app.use(express.static(join(__dirname,'/public')));
并确保您的index.html位于views文件夹中,并且静态资产位于公共文件夹中