Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 声明了请求主体,但日志显示它在客户端和服务器端都未定义_Javascript_Node.js_Express_Xmlhttprequest_Fetch Api - Fatal编程技术网

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

Javascript 声明了请求主体,但日志显示它在客户端和服务器端都未定义,javascript,node.js,express,xmlhttprequest,fetch-api,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-T

在客户端,我正在执行下面这样的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!!!
})

更新 正如在接受的答案中提到的,
主体解析器
中间件缺失,我在服务器端代码中添加了以下代码行:

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框架,对吗

如果是这样,您需要使用模块从请求负载解析json

代码可能如下所示:

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

server.use(bodyParser.json());

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

我猜在服务器端,您使用的是Expressjs框架,对吗

如果是这样,您需要使用模块从请求负载解析json

代码可能如下所示:

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

server.use(bodyParser.json());

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

您的服务器框架是什么?在许多框架中,主体在流中可用,但在请求启动时还没有被读取,因此
req.body
中还没有任何内容。您可以自己在请求处理程序中读取,也可以使用中间件将其读取并解析为
req.body
。然后Trieu的答案就是一种方法。@jfriend00谢谢,事实上,他的答案起了作用,现在服务器端将
req.body
记录为
{name:'name',email:'email'}
,但是web浏览器控制台仍然会记录
undefinded
当您从客户端发送响应时,它不会进入
req.body
。不知道你为什么会这么想。它以流的形式发送。您的服务器框架是什么?在许多框架中,主体在流中可用,但在请求启动时还没有被读取,因此
req.body
中还没有任何内容。您可以自己在请求处理程序中读取,也可以使用中间件将其读取并解析为
req.body
。然后Trieu的答案就是一种方法。@jfriend00谢谢,事实上,他的答案起了作用,现在服务器端将
req.body
记录为
{name:'name',email:'email'}
,但是web浏览器控制台仍然会记录
undefinded
当您从客户端发送响应时,它不会进入
req.body
。不知道你为什么会这么想。它以流的形式发送。