首页 > 解决方案 > 如何使用 expressjs 发送多个文件?

问题描述

我希望能够发送许多文件,如果可能的话,可以发送整个目录,以便我可以在从 html 文件调用的其他 js 文件中访问它。

const app = require("express")();
const http = require("http").Server(app);
const io = require("socket.io")(http);
const port = process.env.PORT || 3000;

app.use("/styles", express.static(__dirname));

app.get("/", function (req, res) {
  //res.sendFile("C:/Users/Kevin_Who/Desktop/Online Chat Game/index.html");
  //res.sendFile("C:/Users/Kevin_Who/Desktop/Online Chat Game/mainScript.js");
  res.sendFile("C:/Users/Kevin_Who/Desktop/Online Game Files/");
  //app.use(express.static("Online Game Files"));
});

我尝试使用 res.sendFile 发送许多文件,但它只发送第一个文件。<script src="mainScript.js" type="module"></script>在 html 文件中,它在脚本标记 ( ) 中引用 mainScript.js 。在 mainScript.js 中,它还引用了图像文件,我需要帮助找到如何发送和访问这些文件(tiles[2].src = "./Assets/Blocks/StoneBrickWall.png";)。

标签: javascripthtmlnode.jsexpress

解决方案


当浏览器在您的 html 文件中访问此内容时:

<script src="mainScript.js" type="module"></script>

它将向您的服务器创建一个新的 http 请求。该 http 请求将指向当前页面 URL 的路径<somePath>/mainScript.js<somePath>如果该 URL 是顶级 URL,则请求将转到/mainScript.js. 您的服务器需要处理该特定请求/mainScript.js并发送相应的脚本文件。

这就是网页的工作方式。浏览器对文件中的每个资源(脚本、图像、CSS 文件等)发出单独的 http 请求,您的服务器需要分别响应每个 http 请求并发送适当的资源。

在 Express 中,这些对静态资源的请求通常使用express.static()一行中间件来处理目录层次结构中的许多文件的服务。

注意:通常建议不要对静态资源使用路径相对 URL,因为浏览器会将这些路径相对 URL 与当前网页的路径结合起来,这将使得在不同的网页中使用相同的静态资源变得困难。您的网站。相反,您的静态 URL 以前导开头,/这样无论在哪个页面中使用它们,它们都会向您的服务器生成一个恒定的 URL 请求。

我尝试使用 res.sendFile 发送许多文件

您只能发送一个带有res.sendFile(). 它将那个文件作为 http 响应发送,并且每个请求只能发送一个 http 响应。

在 mainScript.js 中,它还引用了图像文件,我需要帮助找到如何发送和访问这些文件tiles[2].src = "./Assets/Blocks/StoneBrickWall.png";

这也将导致浏览器向您的服务器发出新请求,您还需要让服务器响应该请求。同样,您可能不希望它以 . 开头./,而只是/.


推荐阅读