XMLHttpRequest在请求nodejs api中未定义GET参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XMLHttpRequest在请求nodejs api中未定义GET参数相关的知识,希望对你有一定的参考价值。

我试图通过XMLHttpRequest传递params并获得'undefined' -

客户:

var xj = new XMLHttpRequest();
var params = JSON.stringify({
    PreviousTab: "cnn.com",
    CurrentTab: "bbc.com"
});

xj.open("GET", "http://localhost:8080/api/traceTabs", true);
xj.setRequestHeader("Content-Type", "application/json");
xj.setRequestHeader ("Accept", "application/json");

xj.send(params);

服务器(Node.js):

app.get('/api/traceTabs', function (req, res) {
   console.log('change url from ' + req.body.PreviousTab +
   ' to ' + req.body.CurrentTab); // return 'undefined'
         });

server.js配置(Node.js):

var express        = require('express');
var app            = express();
var bodyParser     = require('body-parser');
var methodOverride = require('method-override');

var port = process.env.PORT || 8080;     
app.use(bodyParser.json()); 
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); 
app.use(bodyParser.urlencoded({ extended: true })); 

app.use(methodOverride('X-HTTP-Method-Override')); 
app.use(express.static(__dirname + '/public')); 

require('./app/routes')(app); 

app.listen(port);   
console.log('Listen to port ' + port);          
exports = module.exports = app;                         

我尝试获取params的所有选项都返回'undefined':

req.body.PreviousTab / req.param('PreviousTab')等等。

有人可以帮忙吗?

答案

如上所述,GET或HEAD请求不能有正文。如果您的数据很大,则应移至POST请求。

但是,如果要使用的参数与示例中的参数一样短,则应该使用use query strings

var url = "bla.php";
var params = "somevariable=somevalue&anothervariable=anothervalue";
var http = new XMLHttpRequest();

http.open("GET", url+"?"+params, true);
http.send(null);

在节点方面,假设您使用express,您可以使用以下方法读取变量:

var somevariable = req.query.somevariable;
var anothervariable = req.query.anothervariable;
另一答案

来自XMLHttlRequest.send()文档:

... If the request method is GET OR HEAD,
the argument is ignored and the request body is set to null.

将您的发送方法更改为POST。

以上是关于XMLHttpRequest在请求nodejs api中未定义GET参数的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS + Express Cors + SocketIO = XMLHttpRequest 错误

axios

forEach循环内的XMLHTTPRequest不起作用

向本地nodeJS服务器发出发布请求时出现AngularJS CORS错误

AJAX - onreadystatechange 事件(XMLHttpRequest对象的属性)

在我们的 nodejs 应用程序中出现“Access-Control-Allow-Origin”错误