首页 > 解决方案 > 当我更改提供 index.html 文件的方式时,哪些路径不起作用?

问题描述

我最近决定更新我提供 index.html 文件的方式

app.use('/', express.static(__dirname + '/..')); 

app.get('/', function(req, res) {
  res.sendFile(path.join(__dirname + '/../index.html'));
});

两者都可以正常工作,因为它们都可以正确地为我的 index.html 文件提供服务。但是,当我切换到使用app.get...

我无法再让我的路径在我的 index.html 文件中工作。

例如,我的 index.html 文件中有一个 .svg 文件,它的作用如下:

<img src="dist/images/svg/favicon.svg" width="128" height="128">

现在失败的请求( 404 错误)在控制台中如下所示:

http://localhost:3000/dist/images/svg/favicon.svg

我尝试在根目录中添加如下:

<img src="ll-server/dist/images/svg/favicon.svg" width="128" height="128">

但这无济于事 - 两者都给出 404 错误。

为什么改变我提供 index.html 文件的方式会破坏 index.html 文件中的路径?

我怎样才能解决这个问题?

标签: javascripthtmlexpressget

解决方案


为什么改变我提供 index.html 文件的方式会破坏 index.html 文件中的路径?

use为每个以指定路径开头的 URL 运行一些代码。该代码 ( static) 查看 URL,在指定路径上找到匹配的文件,并提供该文件。

get为特定的 URL 运行一些(至少在这种情况下,因为您没有使用*或参数)并且该代码index.html仅提供index.html.

您的图像已停止工作,因为您删除了提供 HTML 的代码以及仅提供 HTML 的代码的图像。

我怎样才能解决这个问题?

将代码恢复原状。您所做的更改不合理。

————

然后解决您的安全问题。

如果您的 JS 模块所在的目录,则您提供静态文件的目录是父目录。这意味着您已经在 Web 服务器上提供了 JS 模块(可能还有所有 JS 模块)的 URL。

不要暴露您的服务器端业务逻辑。

更改目录结构。一个典型的例子是:

 /            (containing the project)
 /src/        (containing the JS)
 /static/     (containing the static files)

推荐阅读