С Node / Express, как я могу обслуживать stati c файлы из React только для определенного c маршрута? - PullRequest
0 голосов
/ 09 марта 2020

В моем server.js файле для моего Express приложения я импортирую маршрутизатор с

const portfolio = require('./routes/portfolio')

, и я получаю к нему доступ через

app.use('/portfolio', portfolio);

Внутри этого маршрутизатора, У меня есть следующее:

router.use('/loanamort', (req, res, next) => {
    express.static(path.join(__dirname, '..', 'portfolio','loanamort','build'));
    next();
})

Я пытаюсь получить доступ к файлу index.html в папке сборки React. Однако он не будет обслуживать файлы, когда я пытаюсь получить доступ к URL "localhost:port/portfolio/loanamort". Это работает, когда я делаю то же самое через файл server.js с:

app.use(express.static(path.join(__dirname,'portfolio','loanamort','build')));

Я не понимаю почему, и я хотел бы обслуживать и получать доступ к index.html только тогда, когда пользователи go через /portfolio/loanamort URL-путь. Как я могу это исправить?

Для контекста, моя сборка проекта выглядит следующим образом:

application
    |- server.js
    |- routes
         |- portfolio.js
         |- portfolio
               |- loanamort
                      |- build
                          |- index.html
                          |- static

1 Ответ

0 голосов
/ 09 марта 2020

express.static() возвращает промежуточное ПО функция . Затем предполагается, что эта функция передается в обработчик промежуточного программного обеспечения, который, в свою очередь, вызывает эту функцию , когда ее маршрут совпадает:

const staticMiddleware = express.static(path.join(__dirname, 'portfolio', 'loanamort', 'build'));
// staticMiddleware holds a reference to a **function**!
app.use(staticMiddleware);

Итак, чтобы чтобы ваш код заработал, вы должны вызвать эту функцию в вашем обработчике маршрута:

// Declare the middleware outside of ".use()", so that you don't re-instantiate
// it for every request.
const staticMiddleware = express.static(path.join(__dirname, 'portfolio', 'loanamort', 'build'));
router.use('/loanamort', (req, res, next) => {
    staticMiddleware(req, res, next);
})

staticMiddleware сама вызовет next(), поэтому этот код должен работать очень хорошо. Подробнее о express middleware здесь: http://expressjs.com/en/guide/using-middleware.html#using -middleware .

Однако вы можете просто указать путь, по которому должен использоваться сервер stati c:

app.use('/loanamort', express.static(path.join(__dirname, 'portfolio', 'loanamort', 'build')));

Очевидно, когда вы это видите, не так ли? Узнайте больше об этом решении и express.static() здесь: http://expressjs.com/en/starter/static-files.html#serving -stati c -files-in- express.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...