У меня возникли проблемы с запуском моих аксиом .get
с помощью React.
Я создал сервер nodeJS с express
для отображения моей страницы реагирования каждый раз, когда я хочу обновить свою страницу. Та работа.
Но проблема в том, что он блокирует мои аксиомы .get()
. Итак, моя страница отображается нормально без данных, которые я обычно получаю в режиме разработки.
BackEnd => сервер.js с модулем sequelize
для управления моей базой данных
const express = require('express');
const app = express();
const cors = require('cors');
const path = require('path');
app.use(express.json());
app.use(cors());
const db = require('./models');
app.use(express.static(path.join(__dirname, 'build')));
app.get('/*', function (req, res) {
res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
const governmentCreateRouter = require('./routes/GovernmentCreate');
app.use("/governmentCreate", governmentCreateRouter);
db.sequelize.sync().then(() => {
app.listen();
});
Бэкэнд => ПравительствоCreate.js
const express = require('express');
const router = express.Router();
const { GovernmentCreate } = require('../models');
router.get("/", async (req, res) => {
const listOfGovernments = await GovernmentCreate.findAll({
include: {all: true}
});
res.json(listOfGovernments);
});
FrontEnd => Часть кода внутри моего Правительственная стена.js, которая вызывается с URL-адресом https://www.mon-gouvernement.fr/gouvernement-galerie
const [governmentList, setGovernmentList] = useState([]);
axios.get(`https://www.mon-gouvernement.fr/GovernmentCreate`)
.then((res) => {
console.info(res.data);
const resData = res.data;
setGovernmentList(sortResData);
}).catch((err) => {
console.info(err);
});
После многократного поиска я думаю, что проблема связана с этими строками в моем server.js:
app.get('/*', function (req, res) {
res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
Но если я удалю его, то при попытке обновить страницу у меня будет отображаться белая страница Cannot GET /gouvernement-galerie
.
Так что я запасаюсь этим вопросом. Мне нужна твоя помощь, чтобы двигаться вперед.
Извините, я не понимаю, что вы имеете в виду. Не могли бы вы быть более конкретным, пожалуйста. Я запасаюсь уже 2 дня, так что мне действительно нужно объяснение.
.get('/*'
обрабатывает запросы все GET, отвечая из каталога сборки (чтобы включить маршрутизацию состояния push в вашем SPA). Итак, если это первый, как именно вы ожидаете, что любой другой маршрут будет доступен? Вы смотрели на ответ, который получал Axios?
Та работа ! Я не знал о важности маршрутов заказов в nodeJs. Большое тебе спасибо.
Проблема решена !
Как упомянул @jonrsharpe, я должен переключить свой .get('/*'
в конец моих маршрутов. Мой server.js
выглядит так:
const express = require('express');
const app = express();
const cors = require('cors');
const path = require('path');
app.use(express.json());
app.use(cors());
const db = require('./models');
app.use(express.static(path.join(__dirname, 'build')));
//************************************************
// ROUTES
//************************************************
const governmentCreateRouter = require('./routes/GovernmentCreate');
app.use("/governmentCreate", governmentCreateRouter);
app.get('/*', function (req, res) {
res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
db.sequelize.sync().then(() => {
app.listen();
});
Подумайте о порядке, в котором применяются ваши маршруты...