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

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

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

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

  1. Я могу загрузить любые файлы js из папок lib
  2. Я могу загрузить любой из файлов png в папке root/public/art подвеб-местоположение //art/foo/bar.png
  3. Не могу загрузить что-либо из CSS, да и вообще все, что я делаю, дает мне 404 ошибки, это сводит меня с ума.
  4. То же поведение со строкой 13закомментировано
  5. То же самое с различными формами линий 14-16
  6. То же самое с и без использования маршрутизатора

Структура папки

  • Root
    • server.ts
    • public
    • art
      • art в подпапках
    • css
      • canvas.css
    • js
      • js файлы в папках, а не

трескаe

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, затем нажмите и удерживайте кнопку «Обновить» и выберите ее.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

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

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

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

...