ExpressJS静态文件服务始终提供相同的文件

时间:2018-07-06 18:18:49

标签: 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文件。但是,无论我尝试从快递服务器访问哪个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请求显示这种奇怪行为的原因,这时我只是出于好奇而问。

1 个答案:

答案 0 :(得分:2)

原始问题的答案:

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

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

关于您的后续问题:

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