express.js не удается найти маршрут при перезагрузке после начальной загрузки

#node.js #reactjs #express

#node.js #reactjs #экспресс

Вопрос:

Я создал небольшой экспресс-сервер для обслуживания моего приложения react. Это статическое контекстно-реактивное приложение, которое использует вызовы API только для извлечения и отображения данных.

Когда я запускаю свой сервер, все идет хорошо, и когда я перехожу на localhost:5000 сервер автоматически перенаправляет на localhost:5000/login . Однако сервер выдает ошибку при загрузке страницы входа, и я запускаю перезагрузку. Затем он выдает мне Error: Cannot GET /login .

У кого-нибудь есть идеи, что идет не так? Вот код моего скрипта express server, который я запускаю с помощью yarn start (добавлен скрипт запуска в package.json ( "start": "NODE_ENVIRONMENT=production node server.js" ).

 const express = require("express");
const app = express(); // create express app

// add middleware
app.use(express.static("dist"));

// start express server on port 5000
app.listen(5000, () => {
  console.log("server started on port 5000");
});
  

Комментарии:

1. Код в вопросе не обслуживает ничего, кроме статических ресурсов?!

2. @pintxo если у вас есть папка с html this или изображениями, которые вы хотите использовать, я думаю, это нормально. Конечно, это может быть не так эффективно, как просто указывать nginx на папку, но, скажем, если у вас рабочий процесс с pm2 или подобным, может быть более чем приятно иметь все вещи в одном месте.

3. Проблема, вероятно, в том, что нет резервной копии режима истории. В современных веб-приложениях веб-приложение (react) обрабатывает изменения страницы, имитируя изменения страницы и изменяя URL в адресной строке. Вы исправляете это, перенаправляя все, что не является активом (или чем-то еще), обратно в свой top index.html. Вот почему вы можете выбрать свой путь к /login , но не перезагружаться, находясь там.

4. Вы могли бы попробовать npmjs.com/package/express-history-api-fallback . Сервер разработки автоматически выполняет резервные копии режима истории. Лично я бы использовал nginx для этого в производстве. (Извините за спам)