我正在尝试将请求“发布”到我的节点服务器。
以下是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”对象。该对象中的body节点也是空的。我哪里错了。我在哪里可以收到服务器中的parcel对象?
答案 0 :(得分:1)
您没有在客户端发送任何正文,因此您在服务器上没有收到它就不足为奇了。
根据定义,您正在制作没有正文的GET请求。
尝试使用curl
向正文发出请求并查看您是否进入服务器 - 这样就可以消除Express或body解析器出现问题的可能性。确保使用正确的内容类型。
如果你想发送一个正文,那么:
如果您无法直接使用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命令再次测试它。