获取错误 - 请求正文中缺少“数据”有效负载

4 javascript reactjs graphql strapi

GraphQL 和 Strapi API 已更改,它们向 json 对象添加了父级别,其中必须获取的整个 JSON 对象必须有一个名为 的父键data,如果您在没有此键的情况下提交请求,则 API 将被拒绝并返回 400错误。

我提交的JSON是这样的

{"title": "aaa", "rating": "3", "body": "aa", "categories": "5"}
Run Code Online (Sandbox Code Playgroud)

api要求它是这样的

{"data" : {"title": "aaa", "rating": "3", "body": "aa", "categories": "5"}}
Run Code Online (Sandbox Code Playgroud)

如何调整我的代码以便在此 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]

    }
}
Run Code Online (Sandbox Code Playgroud)

我的完整代码如下:

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...)

Run Code Online (Sandbox Code Playgroud)

小智 11

尝试将您的 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})

        })
Run Code Online (Sandbox Code Playgroud)

  • 你是一个伟大的人!@OddRadAche (2认同)