在某个页面上时,Express 不提供我的静态文件

Express isn't serving my static files when on a certain page

当我在我的“/”和“/home”页面上时,Express 可以很好地提供我的静态文件,但是当我转到“/home/download”时,我的文件不再提供。我正在使用 EJS 呈现我的页面。

router.get("/download", isAuthed, (req, res) => {
    res.render("download", {
        username: req.user.username,
        discordId: req.user.discordId,
        avatar: req.user.avatar,
        discriminator: req.user.discriminator
    })
})

这是我的 /home 路由器

这是我告诉 express 为我的 public 文件夹提供服务的地方

app.use(express.static(path.join(__dirname, "public")))

如果我遗漏了什么可以帮助您找出问题所在,请告诉我,谢谢。

更新:当在 /home 页面上按下 link 时,我切换到 /home/download 页面

<a class="nav-link nav-color mt-4" href="/home/download">Download</a>

如果这是导致文件无法提供的原因,我该如何更改页面。

这是因为您网页中的链接是相对链接(不要以 / 开头),它告诉浏览器将当前页面的路径添加到它们的 URL 之前要求他们。那会搞乱你的静态路由处理。

举个例子,如果你有这样的事情:

<img src="image.jpg">

然后,当您在 /home/download 时,浏览器会请求:

/home/image.jpg

这不适用于您的 express.static() 代码,因为图像不在 public/home/image.jpg

通常的解决方法是在你的HTML中所有静态资源URLS的前面添加/,这样浏览器就不会将当前页面的路径添加到请求时 URL。

<img src="/image.jpg"> 

如果您需要进一步的帮助,请向我们展示资源的实际 HTML 并向我们展示服务器文件系统中所有内容的位置。