Я провожу несколько тестов с React и Express. Конечная цель - заставить Express подключиться к базе данных Mysql и получать из нее данные.
Я понимаю, как и React, и Express работают достаточно хорошо, и после нескольких попыток я смог заставить свое приложение React получать данные из Express. Это было сделано путем запуска React на порту 3000 и моего server.js на порту 8080, следуя это руководство.
Что меня смущает теперь, когда у меня это работает локально, так это то, как я должен заставить его работать после создания моего приложения.
Я построил его и загрузил, чтобы проверить, работает ли он, но, конечно же, нет.
Если вы проверите консоль, вы увидите, что она не может связаться / пинговать.
Экспресс работает только локально? Мне сложно это понять.
Вот мои скрипты на всякий случай:
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
class App extends Component {
componentDidMount() {
fetch('/ping')
.then(response => response.json())
.then(posts => console.info(posts))
}
render() {
console.info(process.env.PORT)
return (
<div className = "App">
<header className = "App-header">
<img src = {logo} className = "App-logo" alt = "logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className = "App-link"
href = "https://reactjs.org"
target = "_blank"
rel = "noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
}
export default App;
const express = require('express');
const bodyParser = require('body-parser')
const path = require('path');
const app = express();
app.use(express.static(path.join(__dirname, 'build')));
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.get('/ping', function (req, res) {
return res.send(JSON.stringify({ a: 1 }));
});
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
app.listen(process.env.PORT || 8080);
Обновлено: я написал неправильный заголовок, исправил его сейчас.
Внешний интерфейс: Как правило, в React или Angular вы можете использовать существующие переменные среды и установить ur API глобально только один раз, поэтому, даже если вы измените внутренний порт, изменение одной строки кода заставит приложение ur снова работать
scripts: {
"dev": "webpack --env.API_URL=http://localhost:8000 --config webpack.config.dev.js",
"build": "webpack --env.API_URL=https://www.myapi.com --config webpack.config.build.js"
}
Бэкэнд: Переходя к бэкэнд-части, если вы развертываете приложение на сервере IIS, вам нужно много тренироваться, если вы используете Ubuntu, это упрощает развертывание, и вам не нужно менять строку в своем экспресс-коде, вставленном выше. В случае Ubuntu вы можете просто запустить node index.js и использовать какой-нибудь пакет PM2 для запуска приложения в фоновом режиме.
https://www.npmjs.com/package/pm2
Надеюсь, ваше сомнение разрешится, если нет, вы можете прокомментировать ниже
Вам нужна папка node_modules. Server.js - ваш главный файл?
server.js - это файл, использующий Express. Должна ли моя папка node_modules превышать 200 МБ? Кажется ужасно большим
200мб ?? что ты установил? У меня есть папка node.js всего с 20 МБ, которая дает около 50 API для моего приложения.
Просто реагируйте и выражайте свое мнение. Согласно это мне нужно запустить npm install, но даже после его запуска я все еще не могу запустить node server.js
Я так не думаю, это новая папка, которую я создал, следуя руководству здесь, затем я запустил установку это.
Нет совсем ничего
Кстати, узел установлен, только что проверил, запустив sudo apt-get install node
Можете ли вы просто прикрепить изображение запущенного узла server.js в ur VPS?
Я переместил этот разговор в чат chat.stackoverflow.com/rooms/182648/…
Я развертываю это на VPS с Ubuntu. Должен ли я загружать всю папку приложения, включая «node_modules»? Я попытался запустить свой файл server.js с помощью узла, но ничего не произошло. В настоящее время я загрузил только свою папку "build".