声明了请求主体,但是日志显示它在客户端和服务器端都未定义

时间:2017-07-23 03:56:01

标签: javascript node.js express xmlhttprequest fetch-api

在客户端,我正在执行如下所示的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中没有任何内容。

1 个答案:

答案 0 :(得分:3)

我想在服务器端,你正在使用Expressjs框架,对吗?

如果是这样,您需要使用body-parser模块来解析请求有效负载中的json。

代码可能如下所示:

const server = require('express')();
const bodyParser = require('body-parser');

server.use(bodyParser.json());

// Your codes here
server.post()....