为什么node.js发送整个公用文件夹,而只指定了root index.html



所以我正在为我的网页制作一个node.js服务器。在添加了发送index.html的根路由之后,它还发送了指定了out的game.html页面。game.html文件位于根目录中一个名为game的文件夹中。所以我想知道它为什么要发送game.html文件?这是应该发生的吗?我说服务器应该在"/游戏";路径

我正在使用Node.js和Express。

const express = require("express");
const app = express();
const port = 3000;
app.use(express.static("public"));
// ROUTES
app.get("/", (req, res) => {
res.sendFile("index.html", {root: "public"});
})
// Listening
app.listen(port, () => {
console.log(`Listening at port http://localhost:${port}`);
})

在您的代码中,您有两个路由处理程序,可以将响应发送回传入的请求。

这个:

app.get("/", (req, res) => {
res.sendFile("index.html", {root: "public"});
});

非常明显。如果请求是/,则发回index.html文件。

这个:

app.use(express.static("public"));

告诉express将请求的传入路径与公共目录中的任何文件进行比较,如果它们匹配,则将该文件作为对该请求的响应发送回。这正是express.static()的设计初衷。它通常用于服务静态资源,如CSS文件、JS文件,甚至静态HTML文件,因为一条路由可以自动服务于整个目录层次结构。

因此,如果/game/game.html的传入请求到达,并且公共目录包含以下内容:

public
game
game.html

然后,express.static("public")将找到与/game/game.html匹配的文件,并将game.html文件作为响应发送回。这是按设计工作的。

正因为如此,您永远不应该将您不希望自动提供的任何内容放在您传递给express.static()的目录中——在您的特定代码示例中;"公共";目录

最新更新