javascript - XMLHttpRequest GET parametri neodređeni u zahtjevu nodejs api


Pokušavam proslijediti parametre putem XMLHttpRequest i dobivam 'undefined'

Klijent :

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);

Poslužitelj (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 konfiguracija (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;                         

Sve opcije koje sam pokušao da dobijem parametre vraćaju 'undefined':

req.body.PreviousTab/req.param('PreviousTab') i tako dalje.

Može li mi netko pomoći?

Odgovor #1

Kao što je spomenuto, GET ili HEAD zahtjevi ne mogu imati tijelo. Ako su vaši podaci veliki, trebali biste prijeći na POST zahtjev.

Međutim, ako su parametri koje želite koristiti kratki poput onih u primjeru, trebali biste koristiti upitne nizove:

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

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

Na strani Nodea, pretpostavljajući da koristite Express, varijable možete čitati koristeći:

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

Odgovor #2

Iz dokumenata XMLHttpRequest.send():

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

Promijenite svoju metodu slanja u POST.