tldr;
Мой проект - это модуль NPM, который используется сервером ExpressJS. Сервер должен указать конечную точку, а мой модуль сделает все остальное. Как заставить мой модуль загрузить правильную HTML-страницу и получить правильные файлы js / css с правильного пути?
Проблема
Я сталкиваюсь с проблемой, когда вижу структуру каталогов сайта, используя библиотеку serveIndex , и все файлы находятся в правильных каталогах, но по какой-то причине, когда я пытаюсь загрузить любой из файлов, будь то из представления serveIndex
или из фактической конечной точки, куда он должен загружаться, я получаю только 404 ошибки.
Вот пример, если кто-то хотел использовать этот модуль NPM из своего проекта.
app.js (их сервер)
const express = require('express')
const { adminAreaConfig } = require('express-admin-area')
const app = express()
const adminArea = adminAreaConfig(express) // my module being passed the "express" library
app.use('/admin', adminArea) // specify a URL to use my module
app.listen(3000, () => console.log('\n\nServer Online\n\n'))
Вот изображение структуры каталогов моих проектов после того, как она была построена.
Отходя от console.log(__dirname)
, который возвращает <long path string>/express-admin-area/build/src
, я затем говорю своему модулю, используя ссылку express
, переданную фактическим сервером в приведенном выше коде, искать в каталоге views
с
... import libraries etc ...
const adminAreaConfig = express => {
const adminArea = express.Router()
adminArea.use('/', express.static(__dirname + '/views') // sets my modules views to the "http://localhost:3000/admin" path
adminArea.use('/dirs', serveIndex(__dirname)) // will get into this later
... some other stuff like exports etc ...
Затем выполняется попытка загрузки файла index.html
в каталог express-admin-area/build/src/views
, но происходит сбой, поскольку он не может найти файлы CSS и JS внутри express-admin-area/build/src/views/static/css
или .../js
.
Во-первых, я знаю, что это не помогает, потому что вместо поиска http://localhost:3000/admin/static/css/styles.css
он ищет http://localhost:3000/static/css/styles.css
, так что это еще одна проблема, которую мне нужно полностью решить.
Во-вторых, оглядываясь на небольшой пример кода выше, adminArea.use('/dirs', serveIndex(__dirname))
, я использую библиотеку serveIndex
в попытке просмотреть структуру каталогов. Если я перехожу на http://localhost:3000/admin/dirs
, я получаю правильные каталоги и файлы в браузере
Но теперь, если я пытаюсь просмотреть фактический файл, я сталкиваюсь с ошибкой Cannot GET /admin/dir/main.js
, например, если мне нужно перейти к http://localhost:3000/admin/dir/main.js
, но я могу продолжить углубляться в каталоги, если я хотел, например, controllers
или routes
каталоги с изображения.
Что я хочу
Мне нужен способ загрузить эти статические ресурсы. Если я указываю свой модуль на простую HTML-страницу с простым <h1>Hello, World!</h1>
, то это то, что я получу, но попытка загрузить любые внешние скрипты / таблицы стилей - это когда я получаю 404 ошибки и ничего не загружается.