BodyParser Node express не может получить параметр в запросе GET
Я ajax запрос GET на стороне клиента:
$.ajax({
url: '/update',
type: 'get',
data: {
"key": key,
"value": value
},
success: function (data, err) {
}
})
затем на стороне узла я хочу получить параметр
var showParam = function (req, res) {
if (req.body) {
for (var key in req.body) {
console.log(key + ": " + req.body[key]);
}
res.send({status:'ok',message:'data received'});
} else {
console.log("nothing received");
res.send({status:'nok',message:'no Tweet received'});
}
}
app.get('/update', function(req, res){
showParam(req, res);
})
оболочка показывает, что тело пустое и неопределенное.
но когда я изменить get
to post
(как на стороне клиента, так и на стороне сервера), все в порядке, я могу получить параметр правильно.
в чем проблема с моим кодом? Я что-то пропустил?
3 ответов
Если вы выдаете запрос GET, параметры URL не являются частью тела и, таким образом, не будут проанализированы промежуточным по bodyParser.
для доступа к параметрам запроса, просто ссылка req.query
для того, чтобы получить params от bodyParser
вы должны использовать POST
не GET
. Ваш запрос ajax и вызовы сервера должны использовать POST
.
http://expressjs.com/api.html#req.body
app.post('/update', function(req, res){
showParam(req, res);
});
$.ajax({
url: '/update',
type: 'POST',
data: {
"key": key,
"value": value
},
success: function (data, err) {
}
});
для получения GET
params, используйте url
модуль и использовать query = url.parse(req.url, true).query
. query
будет содержать объект со значениями, доступными через query.foo
вы можете получить доступ к своим данным для запроса get на стороне сервера, используя req.query.key
и req.query.value
.