我和我的表弟一直在试验他的新 Photon 芯片,我们决定发挥创意,使用 ComputerCraft(Minecraft 模组)和一些 Lua 代码来驾驶他制造的汽车。不幸的是,每次我们给出一个输入时,它都会索引一个 nil 值;我们不确定是否是因为 http.post 代码错误或我们不知道的东西......有什么想法吗?
URL = "https://api.particle.io/v1/devices/456456456456/updateMotors("
token = "access_token=123456789"
robotState = 0
while true do
os.pullEvent("redstone")
if((redstone.getInput("bottom") == true) and (robotState ~= 0)) then
robotState = 0
returnData = http.post(URL .. "\"0\"" .. ")", token)
returnData.close()
.....
end
end
(代码的其余部分看起来与此相同,因此省略)
我们试图将字符串传递给将驱动电机的光子函数,但每次我们创建红石信号时,它都会显示“Drive:11:尝试索引?(零值)” - 但仅当光子已连接。
我建议添加一个
print( tostring( returnData ) )
并让我们知道打印的内容。
很可能 returnData 为零。
以下是有关 HTTP 句柄的一些信息:
所有三个操作都使用句柄、表,其中包含读取从 HTTP 服务器返回的数据的函数。这些句柄的作用与只读文本模式下 fs.open 返回的 I/O 句柄相同,实现了 close、readLine 和 readAll 方法。因此,有了这些信息,我们就知道
close
是一个有效的函数。这与您的错误一起表明
returnData
为零,失败时由
http.post
返回。故障排除步骤
tostring
上调用
returnData
。它应该返回一个句柄,您可以对其执行
returnData.readAll()
以从请求中获取信息。由于这不起作用,很可能是因为请求失败(当
http.post
失败时返回 nil)。为了找出失败的原因,我建议打印出它正在使用的 URL 并通过浏览器访问它。我还注意到您使用
token
作为您的帖子数据。也许令牌无效?问题也可能是由于令牌的传递方式造成的。也许您不应该将其作为发布数据传递,而应该通过 URL 栏(PhP GET)传递它,如下所示:
returnData = http.post(URL .. "\"0\"" .. ")?"..token)
"https://api.particle.io/v1/devices/456456456456/updateMotors(\"0\")?access_token=123456789"