javascript - XMLHttpRequest GET parametry nedefinované v požadavku nodejs API
Snažím se předat parametry přes XMLHttpRequest a dostávám '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'
});
Konfigurace 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;
Všechny možnosti, které jsem vyzkoušel pro získání parametrů, vracejí 'undefined':
req.body.PreviousTab/req.param('PreviousTab') a tak dále.
Může mi někdo pomoci?
Odpověď č. 1
Jak již bylo zmíněno, GET nebo HEAD požadavky nemohou mít tělo. Pokud jsou vaše data rozsáhlá, měli byste přejít na POST požadavek.
Pokud jsou však parametry, které chcete použít, krátké jako v příkladu, měli byste použít řetězce dotazu:
var url = "bla.php";
var params = "somevariable=somevalue&anothervariable=anothervalue";
var http = new XMLHttpRequest();
http.open("GET", url+"?"+params, true);
http.send(null);
Na straně Node, pokud používáte Express, můžete proměnné číst pomocí:
var somevariable = req.query.somevariable;
var anothervariable = req.query.anothervariable;
Odpověď č. 2
Z dokumentace XMLHttpRequest.send():
... If the request method is GET OR HEAD,
the argument is ignored and the request body is set to null.
Změňte svou metodu odesílání na POST.
