fetch 配合 express 使用req body为空
2021-11-02 本文已影响0人
云高风轻
- 前言
最近用
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)
}
2.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())
1.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的数据类型 必须和
1.pngcontent-Type
匹配
但是这个fetch
默认的类型是text/plain
,这个需要的是纯文本
所以必须手动设置请求头
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'