我有一个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/