2017-12-21 5 views
1

Ich versuche params über XMLHttpRequest passieren und erhalten ‚undefined'-XMLHttpRequest GET in undefined Anfrage params NodeJS api

Auftraggeber:

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 Config (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;       

Alle Optionen, die ich versucht habe, die params zu bekommen zurückkehren 'undefined':

req.body.PreviousTab/req.param ('PreviousTab') und so weiter.

Kann jemand helfen?

+0

können Sie die Middleware verwandte Server-Seite Code hinzufügen – Stamos

+1

Sie müssen POST oder PUT für params gesendet werden - überprüfen Sie Ihre Browser-Entwickler-Tools Registerkarte Netzwerke, sehen Sie keine params in der Anfrage gesendet –

+0

Definition sehen von XM LHttpRequest send() -> https://xhr.spec.whatwg.org/#the-send()-method - um genauer zu sein für meinen vorherigen Kommentar, für GET/HEAD Anfragen, wird send body auf null gesetzt - so PUT/POST-Methoden sind nicht die einzigen Methoden, die Sie mit einem Körper senden können - obwohl sie am häufigsten sind –

Antwort

0

Wie erwähnt, können GET- oder HEAD-Anfragen keinen Rumpf haben. Wenn Ihre Daten groß sind, sollten Sie zu einer POST-Anfrage wechseln.

Wenn jedoch die Parameter, die Sie wie die, die im Beispiel kurz verwenden möchten, sollten Sie use query strings:

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

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

auf der Knotenseite, vorausgesetzt, Sie Eil verwenden, können Sie die Variablen gelesen werden:

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

Von XMLHttlRequest.send() docs:

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

Ihre Sendemethode ändern Post.