2012-12-23 40 views
5

我阿贾克斯客户端的GET请求参数:节点明确的bodyParser不能得到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更改为post(都在客户端和服务器端),一切正常,我可以正确地获取参数。

我的代码有什么问题?我想念什么?

回答

9

如果您正在发出GET请求,则URL参数不是body的一部分,因此不会由bodyParser中间件进行分析。

要访问查询参数,只是参考req.query

1

为了得到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参数,可以使用url模块,并使用query = url.parse(req.url, true).queryquery将包含一个对象,其值可通过query.foo

+0

因此,如果我想从服务器端获取请求的参数,我该怎么办? – hh54188

+1

查看我的编辑信息查询。 – Trevor

+0

非常感谢,但我想知道为什么'bodyParser'不能解析get参数呢?我认为如果它可以做这个工作,它可能会更好 – hh54188

0

您可以通过使用req.query.keyreq.query.value访问你的服务器端GET请求数据。