为什么我的Express服务器除了index.html外,其他文件都是404的响应?

问题描述 投票:1回答:1

我正在用Express学习Node.js,想弄一个小服务器运行学习。我对所有链接到我的文件的请求都得到404的响应代码。index.html 文件(如 .css, .js,和图像文件)。)

我用来发送的代码是 index.html:

routes.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, "/clientSide/index.html"));
})

如果我把路径改为整个文件夹。

routes.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, "/clientSide"));
})

我在浏览器中得到了从硬盘到文件夹的路径 但我还是不能用这种方式查看文件。

clientSide 文件夹包含 index.html, app.js, style.css还有两三张图片,都在同一个文件夹里。我无法查看其中任何一个。

我改变了文件名和文件夹名,并检查了大写,但没有用。

SOLVED

我使用的是 app.use(express.static(path.join(__dirname, "static/")));

随着 app = express();

那是不行的,但使用 routes.use 而不是 app.useroutes = express.Router();,就是解决这个问题的

结束

javascript node.js express webserver
1个回答
0
投票

在你的第一个代码片断中,当你写道:"你定义了一个新的中间件函数,用于连接我的index.html文件(例如.css、.js和图片文件)。

routes.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, "/clientSide/index.html"));
})

你定义了一个新的中间件函数,用于请求路由 /; 这就是 routes.get('/', ...) 的。假设你的服务器运行在3000端口上,那么路由 / 地图到 http://127.0.0.1:3000/. 对于这个URL,而不是其他的,Express会执行你提供的函数,该函数会回复文件的 clientSide/index.html. 因此,当您的浏览器请求 http://127.0.0.1:3000/, Express响应正确。

但是你没有说过其他的文件,如 http://127.0.0.1:3000/style.css,这将是路线 /style.css. 你没有为该路由定义任何中间件。因此,Express不知道该怎么做,默认情况下会响应404和一个错误信息。因此,当你的浏览器试图加载 http://127.0.0.1:3000/style.css 中引用的资源,同时获取 index.html样式表无法加载。

你的第二段代码并不能解决任何问题。它真的让事情变得更糟,因为 res.sendFile() 不能发送文件夹(这怎么能行呢),而且会产生错误。你仍然没有定义路由,除了 /现在你所有的文件都无法访问了。

要真正解决这个问题,理论上,你可以为每个文件定义一个繁琐的路由,或者更聪明地用一个叫 途径参数. 但用Express服务一个静态文件夹是一个解决的问题。你可以简单地将工作卸载到 express.static 来替换你的所有代码。

routes.use(express.static(path.join(__dirname, "clientSide/")));

为了更进一步,你不需要Express或Node. js来做静态文件服务器。试试 nginx. 对于简单的网页,你根本不需要服务器;只要双击一下 index.html 并让你的浏览器打开它。

© www.soinside.com 2019 - 2024. All rights reserved.