在客户端,我正在执行如下所示的fetchAPI,我明确声明req.body
,但是req.body
被记录为undefined
,我无法找出原因:
let req=new Request('/register',{
method:'POST',
body:JSON.stringify({
name:'name',
email:'email'
}),
headers:new Headers({
'Content-Type':'application/json'
}),
})
console.log(req.body)
//logs "undefined" on browser console: I wonder why???
fetch(req).then(res=>res.json()).then(data=>{
console.log(data)
})
同样在服务器端,req.body
被记录为未定义:
server.post('/register',(req,res)=>{
console.log(req.body)
// logs "undefined" on Linux console, again I'm not quite sure why!!!
})
如接受的答案所述,body-parser
中间件丢失,我在服务器端代码中添加了以下代码行:
bodyParser=require('body-parser')
server.use(bodyParser.json())
server.use(bodyParser.urlencoded({extended:false}))
server.post('/register',(req,res)=>{
console.log(req.body)
//Now Linux console logs: "{ name: 'name', email: 'email' }"
//Therefore server receives browser request correctly
res.json({
msg:'Server received your request'
})
})
因此,问题现在已解决,Web浏览器控制台也正确记录服务器响应:
let req=new Request('/register',{
method:'POST',
body:JSON.stringify({
name:'name',
email:'email'
}),
headers:new Headers({
'Content-Type':'application/json'
}),
})
console.log(req.body)
// Browser console still logs "undefined" here
fetch(req).then(res=>res.json()).then(data=>{
console.log(data)
//Browser console logs here: "Object {msg: "Server received your request"}"
//Therefore browser receives server response correctly
})
唯一不明确的事情是,网络浏览器仍然将req.body
记录为undefined
。基于@jfriend00评论,我认为这是因为:
在许多框架中,正文在流中可用,但在请求开始时尚未读取,因此req.body中没有任何内容。
答案 0 :(得分:3)
我想在服务器端,你正在使用Expressjs框架,对吗?
如果是这样,您需要使用body-parser模块来解析请求有效负载中的json。
代码可能如下所示:
const server = require('express')();
const bodyParser = require('body-parser');
server.use(bodyParser.json());
// Your codes here
server.post()....