2017-06-21 41 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);}