Javascript 微控制器用espruno中的HTTP POST

Javascript 微控制器用espruno中的HTTP POST,javascript,node.js,http,Javascript,Node.js,Http,我最近给自己买了一个esp8266-12e模块,并在上面加载了espraino.js固件。我正在尝试从设备执行post请求,但设备在尝试post时总是返回“无连接”错误 为了排除故障,我对同一URL运行了GET请求,并且请求成功,这意味着internet正在设备上工作,并且可以与预期的服务器通信 然后我继续查看我的HTTP POST代码中是否有错误,我在node.js应用程序中运行了相同的代码,并成功地将其发布到服务器 这是下面的代码,我删除了服务器的确切地址和我的wifi/通行证信息 var

我最近给自己买了一个esp8266-12e模块,并在上面加载了espraino.js固件。我正在尝试从设备执行post请求,但设备在尝试post时总是返回“无连接”错误

为了排除故障,我对同一URL运行了GET请求,并且请求成功,这意味着internet正在设备上工作,并且可以与预期的服务器通信

然后我继续查看我的HTTP POST代码中是否有错误,我在node.js应用程序中运行了相同的代码,并成功地将其发布到服务器

这是下面的代码,我删除了服务器的确切地址和我的wifi/通行证信息

var http = require("http");
var wifi = require("Wifi");

var sdata = {
 deviceID: 'esp-12',
};

var options = {
  hostname: 'immense-XXXXXX-XXXXX.herokuapp.com',
  method: 'POST',
  path:'/MXXXXXX',
  headers: {
    'Content-Type': 'application/json'
  }
};

var req = http.request(options, function(res) {
  console.log('Status: ' + res.statusCode);
  console.log('Headers: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function(body) {
    console.log('Body: ' + body);
  });
});
req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});
payload = JSON.stringify(sdata);
req.write(payload);
req.end();
执行后来自设备的终端响应

problem with request: no connection
以下是espraino.js HTTP模块的文档。


任何一位JS专家都能看到请求中的问题吗?

证明http post请求需要
'content-length'
头才能正常工作

这是为可能需要它的任何人提供的工作职位请求模型。注意:负载已经格式化为JSON对象

function postX(payload) {
var options = {
  host: 'url',
  port: '80',
  path:'/ext',
  method:'POST',
  headers: { "Content-Type":"application/json", "Content-Length":payload.length }
};
var req = require("http").request(options, function(res)  {
  res.on('data', function(data) {
    console.log("-->"+data);
  });
  res.on('close', function(data) {
    console.log("==> Closed.");
    ticksSinceConnect = 0;
  });
 });
req.end(payload);}

您正在使用
wifi.connect()
包装HTTP相关代码?我已使用
wifi.save()
将wifi配置保存到设备上,我是否应该将请求回调到
wifi.connect
?从文档(我不太熟悉ESPRUNO)中,似乎调用了
wifi.save()
应该足以让固件在启动时重新连接到已保存的WiFi网络(尽管还有一个
WiFi.restore()
,它似乎也会这样做…)。但是,如果出现错误,您可能会尝试使用显式的
wifi.connect()
解决您的问题。另外,请阅读此处的最后一项: