【问题标题】:Fetch error - Missing \"data\" payload in the request body获取错误 - 请求正文中缺少“数据”有效负载
【发布时间】:2022-01-16 23:42:31
【问题描述】:

GraphQL 和 Strapi API 发生了变化,他们为 json 对象添加了一个父级别,其中必须获取的整个 JSON 对象必须有一个名为 data 的父键,如果您在没有此键的情况下提交请求,则API 因 400 错误而被拒绝。

我提交的JSON是这样的

{"title": "aaa", "rating": "3", "body": "aa", "categories": "5"}

api要求是这样的

{"data" : {"title": "aaa", "rating": "3", "body": "aa", "categories": "5"}}

如何调整我的代码以便在此 JSON 对象中插入父键?

使用 Postman,我可以在 Strapi 中发布数据,方法是这样提交数据:

{ "data": {
    "title": "the best car",
    "rating": 7,
    "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt. ",
    "categories": [3,7,4]

    }
}

我的完整代码如下:

import React, { useState } from "react";
import { useNavigate } from "react-router-dom";
import { useQuery, gql } from '@apollo/client'
import { useParams, Link } from 'react-router-dom'

const CATEGORIES = gql`
  query GetCategories {
    categories{
      data
      {
        id
        attributes{
          name
        }
      }
    }
  }
`

const token ="AlaBala"
const Create = () => {
    const [title, setTitle] = useState('');
    const [body, setBody] = useState('');
    const [rating, setRating] = useState(3);
    const [categories, setCategories] = useState(5);
    const history = useNavigate();

    const { loading, error, data } = useQuery(CATEGORIES)

    if (loading) return <p>Loading categories...</p>
    if (error) return <p>`Error! ${error}`</p>

    const handleSubmit = (e) => {
        e.preventDefault();
        const review = { title, rating, body, categories };
        console.log(review)

        fetch('http://localhost:1337/api/reviews/', {
            method: 'POST',
            mode: 'cors',
            headers: { "Content-Type": "application/json",
                "Authorization" : "Token " + token },
            body: JSON.stringify(review)

        })
    }
return (object etc...)

【问题讨论】:

    标签: javascript reactjs graphql strapi


    【解决方案1】:

    尝试将您的 fetch 调用更改为此,注意 body 字段:

    fetch('http://localhost:1337/api/reviews/', {
                method: 'POST',
                mode: 'cors',
                headers: { "Content-Type": "application/json",
                    "Authorization" : "Token " + token },
                body: JSON.stringify({data:review})
    
            })
    

    【讨论】:

    • 你是个好人! @OddRadAche
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多