Некоторые статические файлы expressjs обслуживаются, а другие нет

У меня странная ситуация, и особенно неприятно то, что я делал это много раз, прежде чем это стало чем-то простым, чего мне не хватает.

Пожалуйста, помогите мне почувствовать, что я схожу с ума...

Проблема / Симптомы

  1. Я могу загрузить любые файлы js из папок lib
  2. Я могу загрузить любой из файлов PNG в папке root/public/art под веб-адресом //art/foo/bar.png
  3. Ничего не могу загрузить из CSS, да и вообще, что я делаю, это дает мне 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 Open Dev Tools F12, нажмите и удерживайте кнопку "Обновить" и выберите его.

2 ответа

Решение

Я вижу две проблемы, основанные на том, что вы показываете здесь. Во-первых, это ваша структура каталогов. Точно ли это соответствует вашей структуре? Потому что в вашем приложении вы говорите 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')));

И исправление путей к соединениям в приложении, или исправление физической файловой структуры решит проблему загрузки ресурсов, которые на самом деле не существуют.

Я вижу две проблемы, основанные на том, что вы показываете здесь. Во-первых, это ваша структура каталогов. Точно ли это соответствует вашей структуре? Потому что в вашем приложении вы говорите 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')));
Другие вопросы по тегам