gpt4 book ai didi

javascript - ExpressJS 用于在 GET 请求上呈现内容

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:20 25 4
gpt4 key购买 nike

我有一个 html 页面如下

<!doctype html>
<html lang="en">
<head><meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Report</title>
<link rel="stylesheet" href="assets/app.css"/></head><body>

//Content//

<div id="report"></div><script src="assets/app.js"></script></body></html>

此 html 页面位于以下文件夹中,其结构如下

report
--assets
--app.js
--app.css
--myfile.html

现在我的应用程序正在尝试呈现此 html。下面位于routes.js,结构如下

app.use('/Users/report/assets', express.static('/Users/report/assets'));
app.get('/api/testresults/:id', (req, res) => {
const id = req.params.id;
res.sendFile('/Users/report/myfile.html');
});

我的应用程序结构如下

MyApp 
app
—routes
—index.js
—routes.js
node_modules
package.json
server.js

我应该在这里添加什么。我不想更改 html,因为我相信一旦我使用express.static(),它应该能够找到文件我不断收到错误 app.js not found 404

注意:如果我将 html 的 href 更改为

/Users/report/assets/app.js 

CSS 也一样,它可以工作,但我不想要这样。

最佳答案

如果您希望 assets/app.css 等资源独立于其来源页面的 URL,以便它们可以位于文件系统中的任何位置,请停止使用相对 URL。使用绝对 URL 在网页中引用它们,例如:

/assets/app.css
/assets/app.js

然后,您可以非常轻松地配置 express.static() 路由来处理所有页面的它们。

app.use(express.static("put directory here that contains the assets folder"));

我从你的问题推断是这样的:

app.use(express.static('/Users/report'));

当 Express 收到对 /assets/app.css 的请求时,它将检查 express.static() 路由处理程序。如果您已在 express.static() 中指定 assets 文件夹的父目录,则该路由处理程序将在该目录中查找您想要的 /assets/app.css

因此,在上面的示例中,它将获取 /assets/app.css 的请求,并将其与 express.static('/Users/report') 中指定的路径组合起来,然后查看:

/Users/report/assets/app.css

这就是你想要的。

<小时/>

当您在 HTML 文件中对资源使用的路径不是以 http:/// 开头时,浏览器会认为它与页面的 URL 相关,因此浏览器会获取网页的路径并将其前置到 HTML 中指定的 URL。这确实使静态资源变得复杂,因此这通常不是您想要的。相反,您希望通过确保它们以 / 开头来使它们成为绝对路径。然后,它们很容易设置路由,因为无论包含它们的页面路径是什么,路由都是相同的。

关于javascript - ExpressJS 用于在 GET 请求上呈现内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52174338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com