javascript - XMLHttpRequest GET parameter tidak terdefinisi dalam permintaan api nodejs


Saya mencoba mengirim parameter melalui XMLHttpRequest dan mendapatkan 'undefined'

Klien :

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

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

Semua opsi yang telah saya coba untuk mendapatkan params mengembalikan 'undefined':

req.body.PreviousTab/req.param('PreviousTab') dan seterusnya.

Apakah ada yang bisa membantu?

Jawaban #1

Seperti yang disebutkan, permintaan GET atau HEAD tidak dapat memiliki tubuh. Jika data Anda besar, Anda sebaiknya beralih ke permintaan POST.

Namun, jika parameter yang ingin Anda gunakan pendek seperti yang ada di contoh, Anda sebaiknya menggunakan query string:

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

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

di sisi node, dengan asumsi Anda menggunakan express, Anda dapat membaca variabel-variabel tersebut menggunakan:

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

Jawaban #2

Dari dokumen XMLHttpRequest.send():

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

Ubah metode pengiriman Anda menjadi POST.