2017-06-21 74 views
1

我最近给自己一个esp8266-12e模块,并在其上加载了ESPRUINO.js固件。我尝试从设备执行发布请求,但设备始终在尝试POST时返回“无连接”错误。Espruino的微控制器的HTTP POST

为了排除故障我对相同的URL运行了GET请求,并且请求成功,这意味着互联网正在设备上运行,并且可能与预期的服务器进行通信。

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

这里是下面的代码,我删除了我的服务器和我的无线网络/传递信息的确切地址。从设备执行

problem with request: no connection 

这里后

​​

终端响应为Espruino.js HTTP模块的文档。 https://www.espruino.com/Reference#http

任何JS大师可以看到请求的问题?

+0

你用'wifi.connect()'包装HTTP相关的代码吗? – robertklep

+0

我使用'wifi.save()'将WiFi配置保存到设备上,我是否应该向'wifi.connect'回拨请求? – ex080

+0

从文档(我不是很熟悉Espruino),似乎已经调用'wifi.save()'应该足以使固件在启动时重新连接到已保存的WiFi网络(尽管也有一个' wifi.restore()'这似乎做同样的...)。然而,考虑到你得到的错误,你可能会试着看看是否使用明确的'wifi.connect()'解决了你的问题。另外,请阅读最后一项:https://www.espruino.com/ESP8266_WifiUsage – robertklep

回答

0

原来的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);}