Node.js 找不到客户端文件

Node.js cannot find client-side files

我有一个简单的 node.js 应用程序:

server.js

const express = require('express');
const app = express();

const PORT = 8080;

app.use(express.static('client'));

// Start the express web server listening on 8080
app.listen(8080, () => {
  console.log('Service started on port 8080.');
});

// Serve the homepage
app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});

index.html

<html>
... irrelevant junk ...
<script src="js/client.js"></script>
</html>

然而,当我运行node server.js并打开localhost:8080时,控制台抱怨找不到http://localhost:8080/javascript/client.js

显然,我希望它查看 ./javascript/client.js,而不是根植于本地主机地址——如何解决?

文件夹层次结构简单:

.
├── index.html
├── server.js
├── js
    └── client.js

我已尝试按照建议将 public 更改为 client ,但这没有帮助。

根据您的文件在服务器上的位置,您应该进行三处更改:

app.use(express.static("./public"));

并且,在客户端中,使用这个:

<script src="/js/client.js"></script>

然后,将您的客户端文件移动到服务器端文件下方的根 public 目录中,如下所示:

.
├── index.html
├── server.js
├── public
    ├── js
        └── client.js

在不将客户端文件移动到 public 的情况下,您打开服务器端代码以供客户端读取(您不希望这样)。


工作原理如下:

客户要求:

http://localhost:8080/js/client.js

express.static() 看到一个请求:

 /js/client.js

它从您的 public 文件的根目录开始,并将 /js/client.js 合并到 public 目录路径,然后创建正确的访问路径:

public/js/client.js

您可以在不将客户端文件移动到 public 目录层次结构的情况下使它工作,只需这样做:

app.use(express.static(__dirname));

但是,那会打开所有服务器端文件供客户端读取,而您确实不希望这样。