Ошибки GraphQL с прокси и и ServerParseError

#javascript #reactjs #create-react-app #apollo-server

#javascript #reactjs #создать-реагировать-приложение #apollo-сервер

Вопрос:

Как мне исправить приведенные ниже ошибки?

Ошибка прокси: не удалось запросить прокси-сервер / localhost: 3000 / graphql с localhost: 3000 на http://localhost:3001 /.

введите описание изображения здесь

Вот мой server.js

 const express = require('express');
const path = require('path');
const db = require('./config/connection');
const { ApolloServer } = require('apollo-server-express');
const { typeDefs, resolvers } = require('./schemas');
//const routes = require('./routes');
const { authMiddleware } = require('./utils/auth');

const app = express();
const PORT = process.env.PORT || 3001;

const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: authMiddleware
});

server.applyMiddleware({ app });

app.use(express.urlencoded({ extended: true }));
app.use(express.json());

// if we're in production, serve client/build as static assets
if (process.env.NODE_ENV === 'production') {
  app.use(express.static(path.join(__dirname, '../client/build')));
}

//app.use(routes);

db.once('open', () => {
  app.listen(PORT, () => {
    console.log(`🌍 Now listening on localhost:${PORT}`);
    console.log(`Use GraphQL at http://localhost:${PORT}${server.graphqlPath}`);
  });
});
  

Когда я нажимаю на сообщение об ошибке, оно сообщает, что оно поступает из обработчика события входа в систему

 const handleFormSubmit = async event => {
    event.preventDefault();

     // check if form has everything (as per react-bootstrap docs)
     const form = event.currentTarget;
     if (form.checkValidity() === false) {
       event.preventDefault();
       event.stopPropagation();
     }

    try {
      const { data } = await login({
        variables: {...userFormData} 
      });
      Auth.login(data.login.token);
    } catch (e) {
      console.error(e);
      setShowAlert(true);
    }

    setUserFormData({
      username: '',
      email: '',
      password: '',
    });
  };
  

Все 3 ошибки указывают на эту handleFormSubmit функцию, когда я разворачиваю их в DevTools.

Вот моя package.json в client папке

 "proxy": "http://localhost:3001/",
  "secure": false,
  

Вот полная ошибка POST
введите описание изображения здесь
(Я также исправил uri)

Это мой app.js

 import React from 'react';
import { ApolloProvider } from '@apollo/react-hooks';
import ApolloClient from 'apollo-boost';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import Navbar from './components/Navbar';
import SearchBooks from './pages/SearchBooks';
import SavedBooks from './pages/SavedBooks';

const client = new ApolloClient({
  request: operation => {
    const token = localStorage.getItem('id_token');

    operation.setContext({
      headers: {
        authorization: token ? `Bearer ${token}` : ''
      }
    })
  },
  uri: '/graphql'
});

function App() {
  return (
    <ApolloProvider client={client}>
        <Router>
          <>
            <Navbar />
            <Switch>
              <Route exact path='/' component={SearchBooks} />
              <Route exact path='/saved' component={SavedBooks} />
              <Route render={() => <h1 className='display-2'>Wrong page!</h1>} />
            </Switch>
          </>
        </Router>
    </ApolloProvider>
  );
}

export default App;
  

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

1. можете ли вы опубликовать ответ на запрос graphql? из ошибки кажется, что сервер отвечает ответом, отличным от json.

2. Где ответ на запрос graphql?

3. вы можете найти это на вкладке сеть в chrome dev tools. Это должен быть post-запрос к запрошенному uri localhost: 3000/ localhost:3001/graphql.

4. Пожалуйста, также укажите, что вы используете create-react-app.

5. Это то, что связано с ошибкой прокси: ECONNREFUSED (соединение отклонено): не удалось установить соединение, поскольку целевая машина активно отказалась от него. Обычно это происходит в результате попытки подключиться к службе, которая неактивна на внешнем хосте.