使用node.js时&;Express为什么extra/in地址会断开指向图像的链接而不是html文件的链接?

使用node.js时&;Express为什么extra/in地址会断开指向图像的链接而不是html文件的链接?,node.js,express,Node.js,Express,在地址栏中输入时,以下测试代码按预期工作 这来自app.js app.get("/test", (req, res) => { res.sendFile(__dirname + "/public/index.html"); }); app.use(express.static("public")); 这来自index.html <img src="images/cat.jpg"> 但是,当我在地址栏index.html中输入(注意末尾的额外/)时,会提供服务,

在地址栏中输入时,以下测试代码按预期工作

这来自app.js

app.get("/test", (req, res) => {
    res.sendFile(__dirname + "/public/index.html");
});

app.use(express.static("public"));
这来自index.html

<img src="images/cat.jpg">

但是,当我在地址栏index.html中输入(注意末尾的额外
/
)时,会提供服务,但cat.jpg图像显示为断开的链接


我可能遗漏了一个基本概念,但我不明白为什么额外的
/
会破坏图像链接,但index.html仍然可以使用。为什么它不同时断开它们或两者都断开?

因为浏览器解析URL的方式不同。当浏览器试图获取图像时,您的第一个URL将解析为,因为原始URL以资源
/test
结尾


第二个版本的URL将以目录
/test/
结尾,因此图像的解析URL将被删除

但是为什么index.html不也会崩溃呢?它位于
http://localhost:3000/public/
http://localhost:3000/public/test/
。或者可能是另一个问题,express正在寻找
/test
,但它也在
/test/
上提供index.html,但带有损坏的cat.jpg链接。为什么会这样?你把URL路径和文件路径搞混了。这里显示的第一个路由将/test映射到一个函数,该函数从文件系统中的正确位置提取索引文件,并在命中与路径/test匹配的URL时为其提供服务/test和/test/都匹配,所以都命中同一个路由处理程序。