gpt4 book ai didi

node.js - ExpressJS 静态文件服务始终提供相同的文件

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

我有一个expressJs设置,如下所示:

// Imports...
const app: express.Application = express();
const port: number = 3001;

const listener = new StatementListenerAPI();
app.use('/listen', listener.getRouter());

app.use('/welcome', router);


if (fs.existsSync('./client')) {
// Running in prod environment with pre built client directory. Serve this.
app.use(express.static('./client'));
}

app.listen(port);

所以我有一些路由器连接到 Express 应用程序,并且在底部我声明目录 client 应静态提供服务。该目录包含一个index.html以及大量JS、CSS和PNG文件。然而,无论我尝试从express服务器访问哪个URL,它总是显示静态服务目录中的index.html的代码。对index.html中使用的JS和CSS文件的引用也只是返回index.html的代码。

我使用的是 ExpressJS 4.16.3

我做错了什么?

编辑:所以从技术上讲,如果使用 __dirname + '/client' 而不是 ./client,它就可以工作。我现在得到的是,当从例如发出 GET 请求时Postman(因此“手工制作”HTTP 请求),我总是得到正确的结果。如果我从网络浏览器中调用资源,它仍然始终显示网站(解析index.html)。但是,现在 JS 和 CSS 脚本等所有资源都已正确解析,因此 Chrome 显然可以正确解析这些依赖项,我只是想知道为什么在请求某些 Assets 或某些资源时我仍然得到 index.html 的内容作为结果通过 Chrome 表达端点。通过代码进行 API 调用工作正常,因此这就是手动 chrome 请求显示这种奇怪行为的唯一原因,此时我只是出于好奇而询问。

最佳答案

回答您原来的问题:

提供给 express.static 的路径应该相对于启动 Node 进程的目录或绝对路径。为了安全起见,构造一个绝对路径(即从当前目录或文件)。例如:

app.use(express.static(__dirname + '/client'));

关于您的后续问题:

我认为这是因为 Chrome 使用大量缓存,并且它认为该文件夹应该返回 html 文件。您可以尝试reset all caches in Chrome ,或仅用于页面。

关于node.js - ExpressJS 静态文件服务始终提供相同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51215858/

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