javascript - XMLHttpRequest GET parameter tidak ditentukan dalam permintaan API nodejs
Saya sedang cuba menghantar parameter melalui XMLHttpRequest dan mendapat 'tidak ditakrifkan'
Pelanggan :
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);
Pelayan (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 pilihan yang telah saya cuba untuk mendapatkan parameter mengembalikan 'undefined':
req.body.PreviousTab/req.param('PreviousTab') dan seterusnya.
Adakah seseorang boleh membantu?
Jawapan #1
Seperti yang disebutkan, permintaan GET atau HEAD tidak boleh mempunyai badan. Jika data anda besar, anda harus beralih kepada permintaan POST.
Walau bagaimanapun, jika parameter yang anda ingin gunakan adalah pendek seperti yang terdapat dalam contoh, anda harus menggunakan string pertanyaan:
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, andaian anda menggunakan express, anda boleh membaca pemboleh ubah menggunakan:
var somevariable = req.query.somevariable;
var anothervariable = req.query.anothervariable;
Jawapan #2
Daripada dokumen XMLHttpRequest.send():
... If the request method is GET OR HEAD,
the argument is ignored and the request body is set to null.
Tukar kaedah penghantaran anda kepada POST.
