我正在用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.use
而 routes = express.Router();
,就是解决这个问题的
结束
在你的第一个代码片断中,当你写道:"你定义了一个新的中间件函数,用于连接我的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
并让你的浏览器打开它。