【问题标题】:Some expressjs Static Files being served while others are not一些 expressjs 静态文件被提供,而另一些则没有
【发布时间】:2019-02-13 13:26:09
【问题描述】:

我有一个奇怪的情况,特别麻烦的是,我已经这样做了很多次,才必须是我缺少的简单的东西。

请帮助我感觉自己快疯了……

问题/症状

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

文件夹结构

    • server.ts
    • 公开
    • 艺术
      • 子文件夹中的艺术品
    • CSS
      • canvas.css
    • js
      • js 文件在文件夹中而不是

代码

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 然后单击并按住刷新并选择它。

【问题讨论】:

    标签: javascript node.js typescript express ts-node


    【解决方案1】:

    根据您在此处显示的内容,我发现了两个问题。首先是您的目录结构。这与您的结构实际情况准确吗?因为在您的应用程序中,您告诉 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')));
    

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

    【讨论】:

    • 天哪!!!!我一直在修复它,我只需要做一个空缓存并在 chrome 中重新加载......
    • 啊,是的,如果 Chrome 缓存了不正确的重定向,它就会这样做。很高兴它已修复。
    猜你喜欢
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多