Búsqueda de sitios web

javascript - XMLHttpRequest GET parámetros indefinidos en la solicitud API de nodejs


Estoy intentando pasar parámetros a través de XMLHttpRequest y obtener 'undefined'

Cliente :

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

Servidor (Node.js):

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

Configuración de 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;                         

Todas las opciones que he probado para obtener los parámetros devuelven 'indefinido':

req.body.PreviousTab/req.param('PreviousTab') y así sucesivamente.

¿Alguien puede ayudar?

Respuesta #1

Como se mencionó, las solicitudes GET o HEAD no pueden tener un cuerpo. Si tus datos son grandes, deberías pasar a una solicitud POST.

Sin embargo, si los parámetros que desea usar son cortos como los del ejemplo, debería usar cadenas de consulta:

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

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

en el lado de node, suponiendo que uses express, puedes leer las variables usando:

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

Respuesta #2

De la documentación de XMLHttpRequest.send():

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

Cambia tu método de envío a POST.