簡體   English   中英

聲明了請求主體,但日志顯示在客戶端和服務器端均未定義

[英]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!!!
})

UPDATE

如公認的答案所述,缺少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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM