2015-05-01 35 views
0

我试图将一些JSON数据发布到RESTful API。但数据不会发布。我使用节点请求:https://github.com/request/request 和使用该页面的代码片段。 我的代码片段:节点请求发布数据

var async = require('async'); 
var request = require('request'); 

var options = { 
    url: 'http://abcd.dfgh.com/v2.0/observations', 
    method: 'POST', 
    headers: { 
     'x-api-key': '123456=', 
     'content-type': 'application/json' 
    } 
}; 

SensorTag.discover(function(sensorTag) { 
    function callback(error, response, postdata) { 
     console.log("HERE GOES POST DATA : " + postdata); 
     if (!error && response.statusCode == 200) { 
      var info = JSON.parse(postdata); 
      console.log(info.stargazers_count + " Stars"); 
      console.log(info.forks_count + " Forks"); 
     } 
    } 
    async.series([ 
     /*some functions*/ 
     function(callback) { 
      setTimeout(callback, 2000); 
      loop(); 
     } 
    ]) 
    function loop() { 
     async.series([ 
      /*Some functions*/ 
      function(callback) { 
       /*data etc...*/ 
       var postdata = "{ \"version\": \"1.0.1\", \"observations\": [ { \"sensor\": \"TISensorTag_temp_01\", \"record\": [ { \"starttime\": \"" + formatDate(new Date()) + "\", \"output\": [ { \"name\": \"ObjTemp\", \"value\": \"" + objtemp + "\" }, { \"name\": \"AmbTemp\", \"value\": \"" + ambtemp + "\" } ] } ] } ] }"; 
       request.post(options, callback); 
      } 

     ]) 
    } 
}) 

但数据没有公布,它不断而不发布数据循环。任何人都可以请澄清发生了什么? 也是我发现的是request并没有叫callback function,因为这一部分,我不能看到:

console.log("HERE GOES POST DATA : "+postdata); 
+1

它似乎并不像你实际使用'postdata' –

+0

@ExplosionPills请回调函数 – Zim

回答

0

你实际上并没有使用你的postdata变量。

尝试将其管理至请求,例如

var req = request.pos(options, callback); 
req.end(postdata); // Writes data to the stream, and closes it 
0

您没有使用postdata同时发送请求:

var postdata = "{ \"version\": \"1.0.1\", \"observations\": [ { \"sensor\": \"TISensorTag_temp_01\", \"record\": [ { \"starttime\": \"" + formatDate(new Date()) + "\", \"output\": [ { \"name\": \"ObjTemp\", \"value\": \"" + objtemp + "\" }, { \"name\": \"AmbTemp\", \"value\": \"" + ambtemp + "\" } ] } ] } ] }"; 
options.data = postdata; //added data to post request 
request.post(options, callback); 

关于回调,您已初始化回调,并在你的情况,你不必通过回调的函数参数。尝试使用以下:

async.series([ 
    /*some functions*/ 
    function() { 
     setTimeout(callback, 2000); 
     loop(); 
    } 
]) 
+0

我尝试这样做,但后并没有发生。 – Zim

+0

我必须为POST响应设置另一个回调,这就是为什么我设置它 – Zim

+0

我试着用这个:http://blog.modulus.io/node.js-tutorial-how-to-use-request-module 它工作,但这不是优化的代码,对于我需要写很多次的许多函数。而这会优化。请让我知道如何做到这一点 – Zim