繁体   English   中英

node.js,express和主体解析器中的request.body为空

[英]request.body is empty in node.js, express and body parser

我试图将请求“发布”到我的节点服务器。

以下是xhttp请求。

let parcel = {
  userId: userId, //string
  unitid: unitid, //string
  selections: selections //array
};

 //Call to the Server
 var oReq = new XMLHttpRequest();
 oReq.addEventListener("load", transferComplete);

 oReq.open("GET", "http://node.server.com/interaction", true);
 //oReq.setRequestHeader('Content-Type', 'application/json');
 oReq.send(parcel);

 function transferComplete(evt) {
     console.log(this.responseText);
 }

这是服务器代码

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

let app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

const interaction = require('./routes/interaction');

app.use('/interaction', interaction);

app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

app.set("port", process.env.PORT || 5000);

var server = app.listen(app.get('port'), () => {
  console.log("server is started");
});

和交互路由器

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
  console.log(req.body)
  res.send(req.body);
});

module.exports = router;

该请求收到响应,但console.log(req.body)返回一个空对象。 我什至检查了“ req”对象。 该对象中的主体节点也为空。 我要去哪里错了。 我在哪里可以在服务器中收到包裹对象?

您没有在客户端发送任何正文,因此在服务器上没有收到它也就不足为奇了。

您正在发出一个没有定义的正文的GET请求。

尝试使用curl对主体发出请求,然后查看是否进入服务器-这样一来,您应该消除Express或body解析器出现问题的可能性。 确保使用正确的内容类型。

如果您要发送邮件,请:

  1. 在路由处理程序中使用支持它的HTTP方法(例如POST)
  2. 在客户端使用相同的HTTP方法
  3. 实际上正确地发送了一些东西

如果直接使用XMLHttpRequest (具有糟糕的API)遇到麻烦,请使用jQuery,浏览器请求,SuperAgent,Axios,Got,Request,Reqwest等:

另外,要调试请求中实际发送的数据,请参阅浏览器开发人员工具中的“网络”选项卡,并使用netcat可以很好地了解正在发生的情况:

$ nc -lp 3333

它侦听端口3333(在这种情况下),并将打印带有所有标头和正文的整个请求。 例如,在浏览器中访问http:// localhost:3333 / xxx可能会输出:

GET /xxx HTTP/1.1
Host: localhost:3333
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/59.0.3071.109 Chrome/59.0.3071.109 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8,pl;q=0.6
Cookie: io=HQz0J7NwYj76pKf_AAAD

请注意,它不会单独返回响应,它仅适用于单个请求,因此您需要重新启动netcat命令以再次对其进行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM