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