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

标签 node.js express static router

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

相关文章:

javascript - 在express中使用app.get()和app.set()与变量声明有什么区别?

c# - 如何继承父常量并访问它们?

angularjs - 使用 Maven、Protractor 和 Selenium WebDriver 进行集成测试

node.js - ImageMagick:字符串中的表情符号被写成问号

JavaScript 从函数返回值

express - 使用无服务器框架(AWS Lambda/网关)、Express、Mongoose/MongoDB Atlas 的应用程序频繁超时

javascript - Express.js 应用程序尝试使用 Angular : Uncaught Error: [$injector:nomod] and Uncaught Error: [$injector:modulerr]

javascript - 如何用钩子(Hook)取消 sails.js 升力

c++ - 如何更改函数中的值或静态 char*? C++

c# - 在静态类中使用依赖注入(inject)