[英]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.