2016-05-24 55 views
0

我正在使用angular调用一个节点获取api。 “未定义”由节点接收req.query.reqdata我是否应该解析服务器端的JSON?任何帮助将不胜感激。node api没有接收json数据

客户:

function playOrError(instrument, octave, scaletype, basenote) { 
     var reqdata = { 
     "instrument" : instrument, 
     "octave" : octave, 
     "scaletype" : scaletype, 
     "basenote": basenote 
     }; 

     $http.get("/api/getfile", reqdata) 
     .then(
     function(response) { 
      console.log("File request: " + response.data); 
     }, 
     function(error) { 
      console.log("File request failed: " + error); 
     }); 
    } 

服务器:

app.use(bodyParser.json()) 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

... 
app.get('/api/getfile', function(req, res, next) { 
    console.log(req.reqdata) 
    var instument = req.query.instrument 
    console.log(instrument) 

}) 
+0

可能尝试$ http.get(url,{reqdata:reqdata}) –

+0

试过$ http.get(url,{reqdata:reqdata})服务器仍在记录{} – bkolluru

+1

对不起,之前在手机上。如果您尝试传递一个请求的对象,那么使用'{reqdata:reqdata}'对象发出'POST'请求​​更合适,然后使用'req.body.reqdata '。关于GET请求,参见HTTP规范中的[this Previous SO answer](http://stackoverflow.com/questions/978061/http-get-with-request-body)。 –

回答

0

我想出了这一个。贝内特很接近,但它需要第一个价值是参数。通过这种方式,您可以通过对象表示法发送大量查询参数。

$http.get("/api/getfile", {params : reqdata}) 

我还最终将te GET转换为POST。

0

reqdata只有你正在使用在客户端的变量名,并且从未被明确看到。相反,console.log(req.query);应该记录一个对象(它是你传入的reqdata对象);这个对象应该有你添加到reqdata对象中的值,就像这样:

{ 
    "instrument" : instrument, 
    "octave" : octave, 
    "scaletype" : scaletype, 
    "basenote": basenote 
} 

然后,你可以通过做req.query.instrument

当你传递一个变量到一个函数这类似于得到例如仪器。仅仅因为变量被作为参数传递时被命名,并不意味着该函数将使用相同的名称!在这种情况下,reqdata以req.query的形式传入。

+0

谢谢,但是当我记录req.query时,它记录了{} – bkolluru

+0

在调用$ http.get之前,我添加了日志记录并且它已经注册了: 'Object {instrument:“Bass”,octave:“1 octave”,scaletype:“Harmonic轻微“,基调:”Ab“}' 但在服务器上记录日志为空{} – bkolluru