Expressjs как распределить загрузку статичных файлов в зависимости от пути в адресной строке
есть такой простой сервер
import express from "express";
import path from "path";
import fs from "fs";
const __dirname = path.resolve();
const app = express();
app.use(express.json());
app.use(express.static(path.join(__dirname, `src`), { index: 'none' }));///////////////
app.use(express.static(path.join(__dirname, `admin`), { index: 'none' }));////////////
app.get(`/*`, (req, res) => {
let mainHtmlPath;
if (req.url[0] === '/admin') {
mainHtmlPath = path.join(__dirname, `admin`, 'index.html');
} else {
mainHtmlPath = path.join(__dirname, `src`, 'index.html');
}
fs.readFile(mainHtmlPath, 'utf8', (err, html) => {
if (err) console.log(err, 'Ошибка')
res.send(html)
})
});
app.listen(80, () => console.log(`Server is run on port 80`))
я не могу понять, как заставить expressjs загружать именно нужные статические файлы
В итоге мне надо чтобы было так
если путь начинается просто
/
, чтобы грузились статические файлы только из папки src тем более, что он может измениться например /user/setting/
ну и естественно
если путь начинается просто
/admin
, чтобы грузились статические файлы только из папки admin тем более, что он может измениться например admin/users/list/
не знаю стоит ли приводить пример моих скудных попыток
один из вариантов моих попыток
app.use((req, res, next) => {
console.log('++++++++++++++++++++++++++++++++++++++++++', req.url === '/admin/');
console.log('++++++++++++++++++++++++++++++++++++++++++', req.url);
if (req.url[0] === '/admin/') {
express.static(path.join(__dirname, `admin`), { index: 'none' })
} else {
express.static(path.join(__dirname, `src`), { index: 'none' })
}
next()
})
Получаю вот такой ответ в консоли
но все же статические файлы не грузятся
Подскажите что я делаю не так
Ответы (1 шт):
если путь начинается просто
/
, чтобы грузились статические файлы только из папкиsrc
app.use("/", express.static("src"));
если путь начинается просто
/admin
, чтобы грузились статические файлы только из папкиadmin
app.use("/admin", express.static("admin"));
Папки src
и admin
указаны "относительно текущей директории". Если папка в другом месте - придется формировать правильный путь к папке, используя специальную переменную __dirname
.
Более подробная информация в статье https://metanit.com/web/nodejs/4.4.php
Вот рабочий вариант сервера с папками src
и admin
...
const express = require("express");
const app = express();
app.use(express.json());
app.use('/', express.static(`src`));
app.use('/admin', express.static(`admin`));
app.listen(8080, () => console.log(`Server is run on port 8080`))