ExpressJS 静态文件服务始终提供相同的文件
ExpressJS static file serve always serves the same file
我有一个 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 文件的引用也只是 return index.html.
的代码
我正在使用 ExpressJS 4.16.3
我做错了什么?
编辑:所以从技术上讲,如果使用 __dirname + '/client'
而不是 ./client
,它就可以工作。我现在得到的是,当从例如发出 GET 请求时邮递员(因此 "hand-crafting" HTTP 请求),我总是得到正确的结果。如果我从我的网络浏览器中调用资源,它仍然总是显示该网站(解析 index.html)。但是,现在像 JS 和 CSS 脚本这样的所有资源都得到了正确的解析,所以显然 Chrome 正确地解析了这些依赖关系,我只是想知道为什么我仍然得到 index.html 的内容作为结果通过 Chrome 请求某些资产或某些快速端点时。 API 通过代码调用工作正常,所以这就是手动 chrome 请求显示这种奇怪行为的唯一原因,此时我只是出于好奇才问。
原问题的答案:
提供给 express.static
的路径应该是相对于您启动节点进程的目录或绝对路径。为了安全起见,构造一个绝对路径(即从当前目录或文件)。例如:
app.use(express.static(__dirname + '/client'));
关于你的后续问题:
我认为这是因为 Chrome 使用大量缓存并且它认为此文件夹应该 return html 文件。您可以尝试 reset all caches in Chrome,或者仅针对页面。
我有一个 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 文件的引用也只是 return index.html.
我正在使用 ExpressJS 4.16.3
我做错了什么?
编辑:所以从技术上讲,如果使用 __dirname + '/client'
而不是 ./client
,它就可以工作。我现在得到的是,当从例如发出 GET 请求时邮递员(因此 "hand-crafting" HTTP 请求),我总是得到正确的结果。如果我从我的网络浏览器中调用资源,它仍然总是显示该网站(解析 index.html)。但是,现在像 JS 和 CSS 脚本这样的所有资源都得到了正确的解析,所以显然 Chrome 正确地解析了这些依赖关系,我只是想知道为什么我仍然得到 index.html 的内容作为结果通过 Chrome 请求某些资产或某些快速端点时。 API 通过代码调用工作正常,所以这就是手动 chrome 请求显示这种奇怪行为的唯一原因,此时我只是出于好奇才问。
原问题的答案:
提供给 express.static
的路径应该是相对于您启动节点进程的目录或绝对路径。为了安全起见,构造一个绝对路径(即从当前目录或文件)。例如:
app.use(express.static(__dirname + '/client'));
关于你的后续问题:
我认为这是因为 Chrome 使用大量缓存并且它认为此文件夹应该 return html 文件。您可以尝试 reset all caches in Chrome,或者仅针对页面。