NodeMCU/LUA HTTP 服务器没有输出到客户端

No output to client from NodeMCU/LUA HTTP Server

无法从网络服务器获得任何输出到无线客户端。我正在使用的 exact scripts(逐字)似乎比我尝试过的任何其他产品都更优雅、更稳定。

将上述 link 中的 3 个脚本上传到 NodeMCU Dev (ESP8266-12E) 并按下 reset 后,脚本按预期通过串口输出状态:

Communication with MCU...
Got answer! AutoDetect firmware...

NodeMCU firmware detected.
=node.hStatus = 0 (Idle)
eap()
36936
> Status = 0 (Idle)
Status = 0 (Idle)
Status = 0 (Idle)

  { repeats for 30 seconds ... }

Status = 0 (Idle)
Status = 0 (Idle)
network not found, switching to AP mode
Starting up AP with SSID: Unconfigured-2c:36
GET received

上面的输出显示我用另一个客户端连接到这个 AP(收到 GET),但是客户端上从来没有任何输出。浏览器页面是空白的。

输出HTML页面调用的函数位于configServer.lua:

function sendPage(conn)
  conn:send('HTTP/1.1 200 OK\n\n')
  ...

None 语句中的 conn:send() 语句在客户端上生成任何输出。我试过多个客户端和多个浏览器。我还在这个例程中设置了一些 print() 语句,可以看到它正在完全执行。

有谁知道什么类型的问题会导致这种情况或如何进行故障排除?似乎这些脚本对尝试过它们的其他人来说效果很好。

我 运行 使用 http://nodemcu-build.com 构建的 NodeMCU。它基于 SDK v1.4.0。好像效果不错:

NodeMCU custom build by frightanic.com
    branch: master
    commit: c8037568571edb5c568c2f8231e4f8ce0683b883
    SSL: false
    modules: adc,bit,cjson,coap,crypto,dht,enduser_setup,file,gpio,i2c,mqtt,net,node,pwm,rtctime,spi,tmr,u8g,uart,wifi
 build  built on: 2016-02-03 23:59
 powered by Lua 5.1.4 on SDK 1.4.0

它适用于其他人,因为它适用于 NodeMCU 0.9.6。

With NodeMCU 1.4.0, multiple calls to conn:send() won't work.

您需要将所有数据拼接在一起并一次性发送。

conn:send('HTTP/1.1 200 OK\n\n<!DOCTYPE HTML>\n<html>\n<head><meta content="text/html; charset=utf-8">\n<title>Device Configuration</title></head>\n<body>\n<form action="/" method="POST">\n')

或者您可以在发送当前数据块后发送另一数据块,基于 conn:on("sent", send_callback)

local response = {
    'HTTP/1.1 200 OK\n\n',
    '<!DOCTYPE HTML>\n<html>\n<head><meta content="text/html; charset=utf-8">\n<title>Device Configuration</title></head>\n<body>\n<form action="/" method="POST">\n'
}
local function sender(conn)
    if #response>0 then conn:send(table.remove(response,1))
        else conn:close()
    end
end
conn:on("sent", sender)
sender(conn)