当我尝试访问localhost时未调用node.js应用中的get

问题描述

我是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文件夹中,并且静态资产位于公共文件夹中