繁体   English   中英

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 ,而不是植根于 locahost addr - 如何解决?

文件夹层次结构很简单:

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

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

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

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

而且,在客户端,使用这个:

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

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

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

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


这是它的工作原理:

客户要求:

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

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

 /js/client.js

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

public/js/client.js

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

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

但是,那将打开您真正不想要的客户端读取的所有服务器端文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM