Javascript 声明了请求主体,但日志显示它在客户端和服务器端都未定义
在客户端,我正在执行下面这样的fetchAPI,在这里我清楚地声明了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
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
。不知道你为什么会这么想。它以流的形式发送。