Пытаюсь работать с reactjs (create-react-app) и теперь включаю expressjs. То, что я сделал, это
folder/* в folder/client/* (удаление node_modules)folder/client/ и npm install для воссоздания node_modules
* работает как раньше, приложение хорошо отрисовываетcd folder и npm initnpm install express --savefolder/server.js/folder/client/package.jsonnpm run start в /folder и в /folder/clientЗатем я перехожу к localhost:3000 и получаю приложение responsejs, без каких-либо выражений. Затем я перехожу к localhost:8080 и получаю экспресс-результат, который действительно является той же страницей, что и раньше, но без выполнения с помощью реакции (я полагаю, здесь нет ничего плохого)
Затем я перехожу к localhost:3000/test, и он получает прокси для выражения, где я вижу в терминале console.info server.js.
Поэтому я не могу проксировать localhost:3000, но могу localhost:3000/whatever. Что случилось?
server.js
const express = require('express');
const path = require('path'); // haven't installed, should I?
const app = express();
app.use(express.static(path.join(__dirname, 'build'))); // of no use here
app.get('/ping', function (req, res) { // this one works
return res.send('pong');
});
// app.get('', function (req, res) { // doesn't work
// app.get('*', function (req, res) { // doesn't work
// app.get('.', function (req, res) { // doesn't work
// app.get('.*', function (req, res) { // doesn't work
// app.get('./', function (req, res) { // doesn't work
app.get('./*', function (req, res) { // doesn't work
console.info('hey') // never seen
res.sendFile(path.join(__dirname, 'client/src', 'index.html'));
});
app.get('/test', function (req, res) { // this one works
console.info('hey2') // I do see this when calling localhost:3000/test
res.sendFile(path.join(__dirname, 'client/src', 'index.html'));
});
app.listen(process.env.PORT || 8080);
package.json (/)
{
"name": "ouyea",
"version": "0.1.1",
"description": "This project was bootstrapped with [Create React App](https://github.com/facebookincubator/create-react-app).",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"repository": {
"type": "git",
"url": "git+https://xxxx"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://xxxx"
},
"homepage": "https://xxxx",
"dependencies": {
"express": "^4.16.4"
}
}
package.json (/ клиент)
{
"name": "client",
"version": "0.1.1",
"private": true,
"dependencies": {
"axios": "^0.18.0",
"googleapis": "^33.0.0",
"papaparse": "4.6.0",
"react": "^16.4.2",
"react-dom": "^16.4.2",
"react-scripts": "1.1.4",
"semantic-ui-css": "^2.4.0",
"semantic-ui-react": "^0.82.5"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
},
"proxy": {
"": { // I know comments don't work, but I put them here for clarity, none of them worked
// "*": {
// ".": {
// "/": {
"target": "http://localhost:8080"
},
"/test": {
"target": "http://localhost:8080"
}
}
}
аааа ... Понятно ... так что express не управляет приложением, это всего лишь сервер для управления службами, которые должны быть в бэкэнде. Я правильно говорю? тогда кто управляет приложением?
Да, для ваших целей. Существуют приложения, которые представляют собой страницы React, отображаемые на сервере с использованием Express / Koa и т. д., И которые используют клиентскую сторону React (универсальные / изоморфные приложения), но это не то, что вы здесь делаете.
Не могли бы вы написать то же самое в качестве ответа, чтобы я мог закрыть это? в противном случае я могу отбросить вопрос, но ... ну, это может звучать глупо, но я застрял здесь: _)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Цель экспресс-сервера - просто а) отобразить базовую HTML-страницу из вашей папки dist и б) предоставить данные с конечных точек, которые вы настроили в качестве маршрутов в Express, к которым может получить доступ ваше клиентское приложение React. Существуют приложения (универсальные), которые могут отображать страницы React из Express, но это не то, что вы делаете здесь с create-react-app.
Непонятно, что вы пытаетесь сделать.
localhost:3000- это ваше приложение для разработки (предположительно, запускает горячую перезагрузку модуля)? Дело в том, что вы используете прокси-сервер 8080 для доступа к конечным точкам в своем экспресс-приложении, напримерlocalhost:3000/api, для получения данных.