[英]Request body is declared but the log shows it is undefined both on client-side and server-side
在客戶端,我正在像下面這樣執行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
})
唯一尚不清楚的是,Web瀏覽器仍在將req.body
記錄為undefined
。 基於@ jfriend00評論,我認為這是因為:
在許多框架中,主體在流中可用,但是在請求開始時尚未讀取該主體,因此req.body中還沒有任何內容。
我猜在服務器端,您正在使用Expressjs框架,對嗎?
如果是這樣,則需要使用body-parser模塊從請求有效內容中解析json。
該代碼可能類似於:
const server = require('express')();
const bodyParser = require('body-parser');
server.use(bodyParser.json());
// Your codes here
server.post()....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.