#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 для этого в производстве. (Извините за спам)