某些 expressjs 静态文件正在提供,而另一些则没有

Some expressjs Static Files being served while others are not

我有一个奇怪的情况,特别麻烦的是我已经做了很多次,然后它必须是我想念的简单的东西。

请帮帮我,我觉得我正在失去理智...

Problem/Symptoms

  1. 我可以从 lib 文件夹加载任何 js 文件
  2. 我可以加载 Web 位置 //art/foo/bar.pngroot/public/art 文件夹中的任何 png 文件
  3. 无法从 CSS 或 js 加载任何内容,无论我做什么都给我 404 错误,这让我完全疯了。
  4. 注释掉第 13 行的相同行为
  5. 与14-16行的各种形式相同
  6. 使用和不使用路由器时相同

文件夹结构

代码

import * as express from "express";
import * as path from "path";
//const express = require("express")
//const path = require("path")

let app = express()
let port = 3000
let router = express.Router();

router.use('/lib/framework', express.static( path.join(__dirname, 'node_modules','framework')));
router.use('/lib/redactedLib2', express.static(path.join(__dirname, 'node_modules', 'redactedLib2')));
router.use('/lib/redactedLib3', express.static(path.join(__dirname, 'node_modules', 'redactedLib3')));
router.get('/', (req, res) => res.sendFile(path.join(__dirname, 'index.html')))
//app.use('/art/*', express.static(path.join(__dirname, 'public', 'art')));
//app.use('/css/*', express.static(path.join(__dirname, 'public', 'css')));
//app.use('/js/*', express.static(path.join(__dirname, 'public', 'js')));

router.use('/', express.static('public'))

app.use('/', router)

app.listen(port, () => console.log(`Go to http://localhost:${port} to view.`))

解决方案(编辑)

万一以后有人发现这个我一直在修复它我只需要做一个空缓存并重新加载...如果你在 chrome 打开开发工具 F12 然后单击并按住刷新并select它。

根据您在此处显示的内容,我发现了两个问题。首先是您的目录结构。这对你的结构实际是准确的吗?因为在您的应用程序中,您告诉 Node 将 /art/* 转换为 /public/art/ 目录,但该目录实际上位于 /art.

其次,它是虚拟路径前缀的格式。删除 /*;无需声明通配符值。它只会弄乱路径。尾随 / 也是不必要的,尽管它不应该引起问题。无论哪种方式,将您的路线重组为:

router.use('/lib/framework', express.static( path.join(__dirname, 'node_modules','framework')));
router.use('/lib/redactedLib2', express.static(path.join(__dirname, 'node_modules', 'redactedLib2')));
router.use('/lib/redactedLib3', express.static(path.join(__dirname, 'node_modules', 'redactedLib3')));
app.use('/art', express.static(path.join(__dirname, 'public', 'art')));
app.use('/css', express.static(path.join(__dirname, 'public', 'css')));
app.use('/js', express.static(path.join(__dirname, 'public', 'js')));
router.get('/', (req, res) => res.sendFile(path.join(__dirname, 'index.html')));

并且修复应用中的路径连接,或者修复物理文件结构,将解决加载实际不存在的资源的问题。