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.