javascript - XMLHttpRequest GET parametre nedefinované v požiadavke nodejs api


Snažím sa odoslať parametre cez XMLHttpRequest a dostávam 'undefined'

Klient :

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

Server (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 Konfigurácia (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;                         

Všetky možnosti, ktoré som sa pokúsil získať pre parametre, vracajú 'undefined':

req.body.PreviousTab/req.param('PreviousTab') a tak ďalej.

Môže mi niekto pomôcť?

Odpoveď č. 1

Ako už bolo spomenuté, požiadavky GET alebo HEAD nemôžu mať telo. Ak sú vaše údaje veľké, mali by ste prejsť na požiadavku POST.

Avšak, ak sú parametre, ktoré chcete použiť, krátke ako tie v príklade, mali by ste použiť reťazce dotazov:

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

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

Na strane Node, za predpokladu, že používate Express, môžete premenné čítať pomocou:

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

Odpoveď č. 2

Z dokumentácie XMLHttpRequest.send():

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

Zmeňte svoju metódu odosielania na POST.