جافاسكريبت - معلمات GET في XMLHttpRequest غير معرفة في طلب API لنود جي إس


أحاول تمرير المعاملات عبر XMLHttpRequest وأحصل على '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;                         

جميع الخيارات التي جربتها للحصول على المعلمات تُرجع 'غير معرف':

req.body.PreviousTab/req.param('PreviousTab') وهكذا.

هل يمكن لشخص أن يساعد؟

الإجابة رقم 1

كما ذُكر، لا يمكن لطلبات GET أو HEAD أن تحتوي على جسم. إذا كانت بياناتك كبيرة، يجب عليك الانتقال إلى طلب POST.

ومع ذلك، إذا كانت المعلمات التي تريد استخدامها قصيرة مثل تلك في المثال، يجب عليك استخدام سلاسل الاستعلام:

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

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

على جانب Node، بافتراض أنك تستخدم Express، يمكنك قراءة المتغيرات باستخدام:

var somevariable = req.query.somevariable;
var anothervariable = req.query.anothervariable;

الإجابة رقم 2

من وثائق XMLHttpRequest.send():

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

غيّر طريقة الإرسال إلى POST.