javascript - 请求中不支持的媒体类型 "text/plain;charset=UTF-8"。 NextJS API 错误与 Django Rest Framework

标签 javascript python django-rest-framework next.js

我开始学习 Web 开发,并且正在尝试使用 NextJS 和 Django Rest Framework 构建一个网站。 NextJS 代理 API 端点,它可以很好地获取数据,但我正在努力使其在 POST 请求上工​​作。我阅读了请求本身的内容类型,因此无需覆盖,但出现以下错误:

Unsupported media type "text/plain;charset=UTF-8" in request.


如果我覆盖,则错误更改为类型集:

Unsupported media type "application/json; charset=utf-8" in request.


我尝试使用 FormData 并且错误更改为:

Multipart form parse error - Invalid boundary in multipart: None


我在 this question 上读到的我不应该这样覆盖。
这是 Nexts.JS 页面:
export default function NewEvent({ ...props }) {

  const saveEvent = async event => {
    event.preventDefault()
    const formData = new FormData(event.target);
    const res = await fetch("api/countries/",{
      method:"POST",
      body: formData
    })
    console.log(res)
  } 

  return (
      <Stack padding={4} as="form" onSubmit={saveEvent} >
          <Input name="name" placeholder="Insert the event name here" />
          <Input name="code" placeholder="Insert the event name here" />
        <Button type="submit"> Save </Button>
      </Stack>
  );
}
NextJS/api/countries.js:
export default async function handler(req, res) {
  
  let response;

  if (req.method === "POST") {    
    const apiEnd = `http://127.0.0.1:8000/countries/`;
    response = await fetch(apiEnd, {
      method: "POST",
      body:req.body
    });
  }

  const json = await response.json();
  res.json(json);      
}
Django 模型.py:
class Country(models.Model):
    name = models.CharField(max_length=20, blank=False, null=False)
    code = models.CharField(max_length=5, blank=True, null=True)

    def __str__(self):
        """String for representing the Model object."""
        return f'{self.name}'
Django 序列化器.py:
class CountrySerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = models.Country
        fields = "__all__"
Django View .py:
class CountryViewSet(viewsets.ModelViewSet):
    queryset = models.Country.objects.all()
    serializer_class = serializers.CountrySerializer
Django urls.py:
router.register('countries', views.CountryViewSet)
我可以使用 Django Rest Framework Web Browsable API 进行 POST,所以我想它在后端都很好,但是我不能让 NextJS POST 到 API。我究竟做错了什么?

最佳答案

有两件事浮现在脑海:

  • 确保您的请求正确 headers
  • 确保数据格式正确。您可能需要在您的数据上使用 JSON.stringify(也许您已经完成了,我无法从您当前的代码中看出)

  • response = await fetch(apiEnd, {
          method: "POST",
          headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify(javascriptObject)
        });
    

    关于javascript - 请求中不支持的媒体类型 "text/plain;charset=UTF-8"。 NextJS API 错误与 Django Rest Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67543522/

    相关文章:

    javascript - Chrome 扩展字体大小调整

    javascript - 更新变量时动态刷新模板的一部分golang

    php - 使用 jscript 显示/隐藏 div

    python - 计算列表与列表的 pandas 列的交集长度

    Angularjs 中的 Django 管理员

    python - 使用 URL 中的字段在 Django Rest Framework 的 ListAPIView 中进行过滤

    javascript - 从 php json_encode 到 jquery 解码

    python - 调试(过早?)OOM-killer 输出

    Python - 使用线程或队列迭代调用函数的 for 循环

    django-rest-framework - 用于 Django REST 框架的通用 ModelSerializer