【问题标题】:Node.js cannot find client-side filesNode.js 找不到客户端文件
【发布时间】:2021-03-12 00:39:41
【问题描述】:

我有一个简单的 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 地址——如何解决?

文件夹层次结构很简单:

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

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

【问题讨论】:

  • client.js 在您的服务器文件系统中的确切位置?请显示您的服务器端文件层次结构,以便我们可以看到client.jsserver.js 的位置(因为您使用的是相对于服务器上的路径)。如果我们知道这两个文件在您的文件系统中的位置,我们可以在 5 秒内回答这个问题。
  • html 尝试加载 src="js/client.js" ... 那么为什么服务器抱怨它找不到 javascript/client.js - 您的代码表明对 js/client.js 的请求将从 @987654339 提供@ 其中.server.js 所在的文件夹
  • @jfriend00 添加了树。

标签: javascript node.js server client client-server


【解决方案1】:

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

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));

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

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 2014-10-06
    • 1970-01-01
    • 2014-03-01
    • 2022-07-21
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多