fetch 配合 express 使用req body为空

简介: 最近用 node 写后端接口 前端使用fetch,遇到个问题记录如下使用fetch进行post请求的时候,后端node 使用express框架进行body接收的时候始终是个空对象 {}

1. 前言


最近用 node 写后端接口 前端使用fetch,遇到个问题记录如下

使用fetch进行post请求的时候,后端node 使用express框架进行body接收的时候始终是个空对象 {}


2.后端代码



const express = require('express');
let app = express()
app.use(express.json()) // for parsing application/json
app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencod
//*************post 
app.post("/login",(req,res)=>{
    console.log("post------body",req.body)
    res.json({msg:"登录成功",code:1000})
})



3.前端代码


<button onclick="loginFn()"> 登录 -post</button>



let loginFn = async () => {
            let res = await fetch("/login", {
                method: "POST",
                body: JSON.stringify({ name: "1-1-1" }),
            }).then(res => res.json())
            console.log("post 结果:", res)
        }

T2P}KHSK]16E@RBG17}QWL2.png



4. 解决办法 配置请求头


headers 配置


let res = await fetch("/login", {
                method: "POST",
                body: JSON.stringify({ name: "yzs",password:"123456" }),
                headers: {
                    'Content-Type': 'application/json;charset=utf-8'
                }
            }).then(res => res.json())

0ZLI6J0OP8D8]0QOGDK6FRP.png



5.原因 找到了 MDN



fetch(url, {
    body: JSON.stringify(data), // must match 'Content-Type' header
    cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
    credentials: 'same-origin', // include, same-origin, *omit
    headers: {
      'user-agent': 'Mozilla/4.0 MDN Example',
      'content-type': 'application/json'
    },
    method: 'POST', // *GET, POST, PUT, DELETE, etc.
    mode: 'cors', // no-cors, cors, *same-origin
    redirect: 'follow', // manual, *follow, error
    referrer: 'no-referrer', // *client, no-referrer
  })
  .then(response => response.json())


body的数据类型 必须和 content-Type匹配

但是这个fetch默认的类型是text/plain ,这个需要的是纯文本

]QWQ6]U7R1(U_V[1XIC5DFW.png

所以必须手动设置请求头


headers: {
                   'Content-Type': 'application/json;charset=utf-8'
                }



6.扩展


key-value形式对应的 content-type配置


headers: {
    "Content-type": "application/x-www-form-urlencoded; charset=UTF-8",
  },
    body: 'name=yzs&password=123456'





相关文章
|
18天前
uView queryParams 对象转URL参数
uView queryParams 对象转URL参数
20 0
|
18天前
|
XML JSON API
高效使用 Postman:如何正确传递 Query、Path 和 Body 参数
Postman 作为一个功能强大的工具,极大地简化了 API 测试和调试的过程,提供了发送请求和检查响应的直接方法。本文将着重介绍如何在 Postman 中高效地处理请求参数,以提高 API 测试和开发的便利性。
|
18天前
|
JSON 数据格式
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
204 4
|
10月前
node.express中req.body总是undefind解决
node.express中req.body总是undefind解决
66 0
|
18天前
|
JSON 数据格式
这个错误信息表示在执行`requests.post(url, data=data, headers=head).json()`时出现了问题
这个错误信息表示在执行`requests.post(url, data=data, headers=head).json()`时出现了问题
40 2
|
中间件
Koa2 接收post时,body值undefined
本来想通过koa快速搭建一个简单的服务时并测试文件上传的过程,然后使用postman请求时,获取上传的form-data中文件的水,ctx.request.body却一直是undefined?
507 0
|
数据库
koa+Sequelize进行get,post,delete,put,all操作
koa+Sequelize进行get,post,delete,put,all操作
|
前端开发 数据库
浅谈Ajax请求中的GET,POST,PUT,DELETE,PATCH,OPTIONS
浅谈Ajax请求中的GET,POST,PUT,DELETE,PATCH,OPTIONS 在日常的前后端交互,数据请求中最长用的就是Ajax,当然在面试时也经常会被问道请求的方式有哪些?分别什么不同?一般我们都会回答GET请求和POST请求,但其实在后端配置接口时,请求方式不仅这两种,还会有PUT,DELETE,PATCH等,当然我们在开发的时候偶尔也会遇到接口要求使用这几种方式进行请求,下面我们就来讲一讲这几种方式分别有什么不同。 首先先要了解http定义与服务器进行交互的方式,其中基本的有GET,POST,PUT,DELETE,PATCH是后增的方式。同时还要知道URL代表的是 统一资源
浅谈Ajax请求中的GET,POST,PUT,DELETE,PATCH,OPTIONS
|
XML JSON 前端开发
【源码解读】TP5return json_encode ajax自动被加上双引号
在thinkphp5中,return数据才是控制器正确的时候方式,而不是直接echo 然后die 或者exti 因为框架有后置数据的落地处理等等,直接让程序退出并不友好,既然我们选择了框架,就应该遵循框架的设计理念 这样子能让我们避免一些坑爹事件的发生。
216 0
|
XML JSON 数据格式
【Gin】gin json渲染,获取querystring参数,获取form参数,获取path参数,参数绑定
访问:http://localhost:9090/user?username=dahe&password=admin 控制台输出:main.UserInfo{Username:“dahe”, Password:“admin”} ShouldBind会按照下面的顺序解析请求中的数据完成绑定: 如果是 GET 请求,只使用 Form 绑定引擎(query)。 如果是 POST 请求,首先检查 content-type 是否为 JSON 或 XML,然后再使用 Form(form-data)。
180 0
【Gin】gin json渲染,获取querystring参数,获取form参数,获取path参数,参数绑定

热门文章

最新文章