Некоторые статические файлы expressjs обслуживаются, а другие нет
У меня странная ситуация, и особенно неприятно то, что я делал это много раз, прежде чем это стало чем-то простым, чего мне не хватает.
Пожалуйста, помогите мне почувствовать, что я схожу с ума...
Проблема / Симптомы
- Я могу загрузить любые файлы js из папок lib
- Я могу загрузить любой из файлов PNG в папке
root/public/art
под веб-адресом//art/foo/bar.png
- Ничего не могу загрузить из CSS, да и вообще, что я делаю, это дает мне 404 ошибки, это сводит меня с ума.
- Такое же поведение с закомментированной строкой 13
- То же самое с различными формами линий 14-16
- То же самое с и без использования маршрутизатора
Структура папок
- корень
- 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')));