400 НЕВЕРНЫХ ЗАПРОСОВ при публикации с использованием Axios в React

#javascript #reactjs #http #axios #bad-request

#javascript #reactjs #http #axios #неверный запрос

Вопрос:

Может ли кто-нибудь помочь мне с этим?

Я продолжаю получать 400 неверных запросов от Axios.

Я могу передать запрос GET и подтвердить, что он работает нормально.

Я создаю http-common.js файл со следующим кодом:

 import axios from 'axios';

export default axios.create({
    baseURL: 'https://5fa97367c9b4e90016e6a7ec.mockapi.io/api',
    headers: {
        'Content-type': 'application/json'
    }
});
  

Затем я создаю службу, которая использует объект axios выше для отправки HTTP-запросов.

TodoService.js

 import http from '../http-common/http-common';

const getAll=()=>{
    return http.get('/todos');
};

const get=id=>{
    return http.get(`/todos/${id}`);
};

const create=data=> {
    return http.post('/todos',data);
};

const update=(id,data)=>{
    return http.put(`/todos/${id}`,data);
};

const remove = id => {
    return http.delete(`/todos/${id}`);
  };
  
const removeAll = () => {
    return http.delete(`/todos`);
  };
  
const findByTitle = title => {
    return http.get(`/todos?title=${title}`);
  };

  export default {getAll,get,create,update,remove,removeAll,findByTitle};
  

Затем я использую TodoDataService.create (данные) … в компоненте AddTodos.

AddTodos.js

 import React, { useState } from 'react';
import TodoDataService from '../services/TodoService';

const AddTodos = () => {

    const initialTodoState={
        id:null,
        title: '',
        isDone: false,
        user: ''
    };

    const [todo,setTodo]=useState(initialTodoState);
    const [submitted,setSubmitted]=useState(false);

    const handleInputChange=event=>{
        const {name,value}=event.target;
        setTodo({...todo,[name]:value});
    };

    const saveTodo =()=>{
        var data={
            title: todo.title,
            isDone:todo.isDone,
            user: todo.user
            
        };
        console.log(data);

        TodoDataService.create(data)
        .then(response => {
            setTodo({
                id:response.data.id,
                title: response.data.title,
                isDone: response.data.isDone,
                user: response.data.user
            });
            setSubmitted(true);
            console.log(response.data);
        })
        .catch(e => {
            console.log(e);
        });
    };

    const newTodo=()=>{
        setTodo(initialTodoState);
        setSubmitted(false);
    };

    return (
        <div className="submit-form">
      {submitted ? (
        <div> //...
      ) : (
        <div>
          <div className="form-group"> //...  </div>
          
          <div className="form-group"> //...  </div>

          <button onClick={saveTodo} className="btn btn-success">
            Submit
          </button>
        </div>
      )}
    </div>
    )
}

export default AddTodos;

  

При нажатии на отправку выдается эта ошибка:

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

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

1. это ваша полная реализация вашего http-common ? если да, то ваш http-common вообще ничего не делает. ваш create не принимает никаких данных

Ответ №1:

Я воссоздал ваш вызов api и получил этот ответ:

 await fetch('https://5fa97367c9b4e90016e6a7ec.mockapi.io/api/todos', {
method: 'POST', body: JSON.stringify({id: "123",title: "homework", isDone: false, user: "foo"})})
      .then(response => response.json())
      .then(data => {
      console.log(data) 
      })

error 400 "Max number of elements reached for this resource!"
  

вам нужно удалить некоторые записи, чтобы вставить новые

итак, после удаления записи:

 await fetch('https://5fa97367c9b4e90016e6a7ec.mockapi.io/api/todos/1', {
method: 'DELETE'})
      .then(response => response.json())
      .then(data => {
      console.log(data) 
      })
  

VM623:5 {идентификатор: «1», заголовок: «deneme», isDone: true, пользователь: «cafererensimsek»}

и публикуем новый, теперь он работает