Отображение данных Flask с помощью прокси-сервера React

#python #reactjs #flask

#python #reactjs #flask

Вопрос:

Это мой первый опыт использования react и flask. Я пытаюсь отобразить время с конечной точки flask с помощью react. Я получаю статус 200 на сервере flask, но неверный запрос в браузере. Он не содержит кода ответа, но выделен красным цветом без информации об ответе.

Flask находится на порту 5000, а react — на 3000. Я добавил прокси в свой файл package.json в виде «прокси»: «http:localhost:5000 /».

На веб-сайте указано, что текущее время равно 0, что неверно, я не думаю, что react каким-то образом получает данные flask. Сторона flask выводит время, и я вижу, что на стороне сервера выдается код 200.

приложение flask (app.py ) содержится в главном каталоге вместе с приложением react (canoe-finder).

Я очень новичок в react. Поэтому любая помощь приветствуется.

Код реакции

 import React, { useState, useEffect } from 'react';
import logo from './logo.svg';
import './App.css';

function App() {
  const [currentTime, setCurrentTime] = useState(0);

  useEffect(() => {
    fetch('http://localhost:5000/time').then(res => res.json()).then(data => {
      setCurrentTime(data.time);
    });
  }, []);

  return (
    <div className="App">
      <header className="App-header">

        ... no changes in this part ...

        <p>The current time is {currentTime}.</p>
      </header>
    </div>
  );
}

export default App;
  

когда я использую выборку (‘/ time’) вместо выборки (‘http://localhost:5000/time ‘) Я получаю эту ошибку

 Proxy error: Could not proxy request /time from localhost:3000 to http://localhost:5000:.
See https://nodejs.org/api/errors.html#errors_common_system_errors for more information (ECONNREFUSED).
  

Код Flask

 from flask import Flask, render_template, redirect, url_for, request, jsonify, flash
import sqlite3
import time
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.ext.automap import automap_base

app = Flask(__name__)




@app.route('/time')
def get_current_time():
    print(time.time())
    return jsonify('time', time.time())
  

Ответ №1:

Во-первых, правильный синтаксис для вашего сервера Flask, работающего на локальном хосте, будет http://localhost:5000 . Во-вторых, когда вы fetch('/time') находитесь в разработке, сервер разработки распознает, что это не статический ресурс, и передаст ваш запрос в http://localhost:5000/time качестве резервного.

Вы можете прочитать больше об этом здесь, если вам интересно.

Также при выборке данных в useEffect у вас должна быть какая-то переменная состояния загрузки.

 import React, { useState, useEffect } from 'react';
import logo from './logo.svg';
import './App.css';

function App() {
  const [currentTime, setCurrentTime] = useState(0);
  const [loading, setLoading] = useState(true)

  useEffect(() => {
    setLoading(true)
    fetch('http://localhost:5000/time').then(res => res.json()).then(data => {
      setCurrentTime(data.time);
    });
    setLoading(false)
  }, []);

  if (loading) return <h1>Loading data...</h1>
  return (
    <div className="App">
      <header className="App-header">
        <p>The current time is {currentTime}.</p>
      </header>
    </div>
  );
}

export default App;
  

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

1. О, также, если вы новичок в веб-разработке и React, я настоятельно рекомендую вам использовать консоль разработчика, например, в Google Chrome. developers.google.com/web/tools/chrome-devtools/open Вы будете получать ошибки, а также проверять и анализировать запросы, которые вы отправляете, на вкладке «Сеть».

2. большое спасибо, когда я дважды щелкаю по запросу, я вижу данные из flask. Он просто не отображается на экране

3. Я получаю эту ошибку, когда просто использую выборку («/ time») — Ошибка прокси: не удалось выполнить запрос / время прокси с localhost: 3000 на localhost: 5000 :.»

4. как запустить сервер разработки react?

5. Я использую yarn start. Я также добавил свой скрипт flask python в приложение react. все еще не повезло