为什么 XMLHttpRequest 请求体返回 null?
Why is the XMLHttpRequest request body returning null?
我正在尝试向使用 express 的服务器发送 'POST' XMLHttpRequest。
服务器能够接收请求,但请求的正文为空。
在服务器上我收到它:
app.post('/', function(req, res){
res.send(req.statusCode);
console.log(req.body);
})
我认为这没有问题,因为很多消息来源都说这是接收请求的好方法。
这是我的客户端代码:
const user = {
'Key' : 'user',
'Name' : 'user',
'Email' : 'user@example.com',
'Password' : 'password'
}
const jsonFileRequest = new XMLHttpRequest();
jsonFileRequest.open('POST', '/', true);
jsonFileRequest.setRequestHeader('Content-Type', 'application/json');
jsonFileRequest.onreadystatechange = function(){
console.log(`userStatus : ${jsonFileRequest.readyState},\nstatus: ${jsonFileRequest.status}`);
if(jsonFileRequest.readyState == 4 && jsonFileRequest.status == 200)
{
console.log(`userStatus : ✅,\nstatus : ✅`);
}
}
jsonFileRequest.send(JSON.stringify(user));
**这是我的服务器端代码:**
const express = require('express');
const app = express();
const port = 8080;
app.get('/', (req, res) => {
res.sendFile(__dirname + '/frontend/index.html');
app.get('/index.html.js', (req, res) => {
res.sendFile(__dirname + '/frontend/index.html.js');
})
app.get('/data.json', (req, res) => {
res.sendFile(__dirname + '/data.json');
})
})
app.post('/', function(req, res){
res.send(req.statusCode);
console.log(req.body);
})
app.listen(port);
console.log(`listening on http://localhost:${port}`);
你能帮帮我吗?谢谢!
您需要为要发送的 data/body 解析器。默认情况下,express 不解析请求的正文部分。
您可以在您的快速服务器中添加这两行来解决这个问题。
app.use(express.json())
app.use(express.urlencoded({ extended: true}));
您应该尝试使用 express.json()
中间件。禁用时(默认情况下),req.body
returns 未定义。
您可以查看 express
文档了解更多信息:
req.body
Contains key-value pairs of data submitted in the request
body. By default, it is undefined, and is populated when you use
body-parsing middleware such as express.json() or
express.urlencoded().
参见:https://expressjs.com/en/api.html
对您的快速服务器使用以下代码片段应该可行:
// Importing the express module
var express = require('express');
// Initializing the express and port number
var app = express();
var PORT = 3000;
// Calling the express.json() method for parsing
app.use(express.json());
// Reading content-type
app.post('/', function (req, res) {
console.log(req.body.name)
res.end();
})
// Listening to the port
app.listen(PORT, function(err){
if (err) console.log(err);
console.log("Server listening on PORT", PORT);
});
我正在尝试向使用 express 的服务器发送 'POST' XMLHttpRequest。 服务器能够接收请求,但请求的正文为空。
在服务器上我收到它:
app.post('/', function(req, res){
res.send(req.statusCode);
console.log(req.body);
})
我认为这没有问题,因为很多消息来源都说这是接收请求的好方法。
这是我的客户端代码:
const user = {
'Key' : 'user',
'Name' : 'user',
'Email' : 'user@example.com',
'Password' : 'password'
}
const jsonFileRequest = new XMLHttpRequest();
jsonFileRequest.open('POST', '/', true);
jsonFileRequest.setRequestHeader('Content-Type', 'application/json');
jsonFileRequest.onreadystatechange = function(){
console.log(`userStatus : ${jsonFileRequest.readyState},\nstatus: ${jsonFileRequest.status}`);
if(jsonFileRequest.readyState == 4 && jsonFileRequest.status == 200)
{
console.log(`userStatus : ✅,\nstatus : ✅`);
}
}
jsonFileRequest.send(JSON.stringify(user));
**这是我的服务器端代码:**
const express = require('express');
const app = express();
const port = 8080;
app.get('/', (req, res) => {
res.sendFile(__dirname + '/frontend/index.html');
app.get('/index.html.js', (req, res) => {
res.sendFile(__dirname + '/frontend/index.html.js');
})
app.get('/data.json', (req, res) => {
res.sendFile(__dirname + '/data.json');
})
})
app.post('/', function(req, res){
res.send(req.statusCode);
console.log(req.body);
})
app.listen(port);
console.log(`listening on http://localhost:${port}`);
你能帮帮我吗?谢谢!
您需要为要发送的 data/body 解析器。默认情况下,express 不解析请求的正文部分。
您可以在您的快速服务器中添加这两行来解决这个问题。
app.use(express.json())
app.use(express.urlencoded({ extended: true}));
您应该尝试使用 express.json()
中间件。禁用时(默认情况下),req.body
returns 未定义。
您可以查看 express
文档了解更多信息:
req.body
Contains key-value pairs of data submitted in the request body. By default, it is undefined, and is populated when you use body-parsing middleware such as express.json() or express.urlencoded().
参见:https://expressjs.com/en/api.html
对您的快速服务器使用以下代码片段应该可行:
// Importing the express module
var express = require('express');
// Initializing the express and port number
var app = express();
var PORT = 3000;
// Calling the express.json() method for parsing
app.use(express.json());
// Reading content-type
app.post('/', function (req, res) {
console.log(req.body.name)
res.end();
})
// Listening to the port
app.listen(PORT, function(err){
if (err) console.log(err);
console.log("Server listening on PORT", PORT);
});