2017-06-16 157 views
0

我试着去发送POST请求与节点JS一个Arduino和请求包:Receving POST请求

var body = { 
    d:"5", 
    l:"6", 
    TOTAL_VOLUME: "75", 
    meterId: "9" 

    }; 
var options = { 
    url: 'http://'+'192.168.1.102'+'/configData', 
    timeout: 7000, 
    headers: { 
     'Content-type' : 'application/json', 
     'Content-length': JSON.stringify(body).length 
    }, 
    json:true, 
    body: JSON.stringify(body) 
    }; 

    request.post(options, function (error, response, body) { 
    //console.log(error); 
    //console.log(response); 
    console.log(body); 
    if (!error && response.statusCode == 200) { 
     console.log("Changed configuration succesfully. "); 
     // Request to enpoint to save changes in database 
     var options = { 
     url: 'http://'+'8.8.8.8:4000'+'/meter/'+meter.id+'/', 
     method: 'PUT', 
     timeout: 10000, 
     body: { 
      'tank_diameter': tank_diameter, 
      'tank_length':tank_length, 
      'tank_capacity': tank_capacity 
     } 
     }; 

     /*request(options, function (error, response, body) { 
     if (!error && response.statusCode == 200) { 

     } 

     });*/ 

    } 
    done(); 
    }).on('error', function(err) { 
    console.log(err); 
    done(); 

    }); 

上面的代码是我如何发送数据,但是我不是能够获取arduino上的数据。

这是Arduino的代码:

server.on("/configData", HTTP_POST, [](){      // configData Seteo de Valores desde POST 
    StaticJsonBuffer<200> configBuffer; 
    JsonObject& configJson= configBuffer.parseObject(server.arg("plain")); 
    String l = configJson["l"]; 
    String d = configJson["d"]; 
    String meterId2 = configJson["meterId"]; 
    String volumenTotal = configJson["TOTAL_VOLUME"]; 
    LENGTH = l.toFloat(); 
    HEIGHT = d.toFloat(); 
    meterId = meterId2.toInt(); 
    TOTAL_VOLUME = volumenTotal.toFloat(); 
    // GUARDAR EN LA EEPROM 
    int EEadr = 0; 
    EEPROM.write(EEadr, HEIGHT); 
    EEPROM.commit(); 
    EEadr = 10; 
    EEPROM.write(EEadr, LENGTH); 
    EEPROM.commit(); 
    EEadr = 20; 
    EEPROM.write(EEadr, TOTAL_VOLUME); 
    EEPROM.commit(); 
    EEadr = 30; 
    EEPROM.write(EEadr, meterId); 
    EEPROM.commit(); 

    //SHOW ON SERIAL MONITOR 
    Serial.println("l= "+l); 
    Serial.println("d= "+d); 
    Serial.println("meterId2= "+meterId2); 
    Serial.println("TOTAL_VOLUME= "+volumenTotal); 
    server.send (200, "text/json", "{success:true}"); 
    }); 

奇怪的是,如果我用卷曲这样的:

curl -H "Content-type: application/json" -X POST -d "{l:\"55\", r:\"10\", meterId: \"2\"}" http://192.168.1.2 

Arduino的不正确地接收数据,所以这个问题是最可能在我的节点JS请求。谁能告诉我我在这里做错了什么?

UPDATE:

伊夫检查使用Wireshark的请求,并且它导致的卷曲请求(即正在工作的)正被发送基于行的文本数据。任何人都可以告诉我如何使用Node JS和请求以同样的方式发送它? enter image description here

+0

您可以将身体的价值?你用'curl'作为字符串发送它们,但我认为你从js发送它们作为数字。 –

+0

感谢您的时间,我附加在Node JS代码片段上的正文。 –

回答

0

在这些类型的情况下,你可以像wireshark应用程序会检查您的请求结构。

在这个问题上,如果你能看到你附上孔JSON作为一个字符串,因为当你设置的要求库请求JSON标志转换你的身体成JSON给你,让你现在有这样的:

var options = { 
    body: JSON.stringfy(JSON.stringfy(body)) 
}; 

所以你可以通过简单的设置下列选项正确的应用程序:

var options = { 
    url: 'http://'+'www.goole.com'+'/configData', 
    timeout: 7000, 
    json:true, 
    body: body 
}; 
+0

感谢您的回答。不幸的是,这个请求仍然没有被arduino收到。我提到你删除了stringify。与wireshark检查 –