Http Lua将数据发布到粒子(以前称为火花)光子时的索引nil值

Http Lua将数据发布到粒子(以前称为火花)光子时的索引nil值,http,lua,minecraft,photon,computercraft,Http,Lua,Minecraft,Photon,Computercraft,我表哥和我一直在试验他的新光子芯片,我们决定发挥创意,使用ComputerCraft(Minecraft mod)和一些Lua代码来驱动他制造的汽车。不幸的是,每次我们给出一个输入,它都会索引一个nil值;我们不确定这是因为http.post代码错误还是我们不知道的原因。。。有什么想法吗 URL = "https://api.particle.io/v1/devices/456456456456/updateMotors(" token = "access_token=123456789" ro

我表哥和我一直在试验他的新光子芯片,我们决定发挥创意,使用ComputerCraft(Minecraft mod)和一些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:尝试索引?(一个nil值)”——但只有当光子连接时才会这样做。

我建议添加一个
打印(tostring(returnData))
并让我们知道打印的内容

returnData很可能为零

以下是有关HTTP句柄的一些信息:

这三个操作都使用句柄,即包含读取HTTP服务器返回的数据的函数的表。这些句柄的作用与fs.open在只读文本模式下返回的I/O句柄相同,实现close、readLine和readAll方法

因此,有了这些信息,我们知道
close
是一个有效的函数。这与您的错误一起表明
returnData
为nil,失败时由
http.post
返回

故障排除步骤 因此,正如我前面提到的,您需要在调用
returnData
上的
tostring
时添加一个print语句。它应该返回一个句柄,您可以对该句柄执行
returnData.readAll()
on以从请求中获取信息。由于这不起作用,很可能是因为请求失败(当
http.post
failes时,返回nil)

为了找出它失败的原因,我建议打印出它正在使用的URL并通过浏览器访问它。我还注意到您正在使用
令牌
作为post数据。也许令牌无效

问题也可能是由于令牌的传递方式。与其将其作为post数据传递,不如通过URL栏(PhP GET)传递,如下所示:

returnData=http.post(URL.“0\”?.token)

这将转换为
”https://api.particle.io/v1/devices/456456456456/updateMotors(\“0\”)访问令牌=123456789“

我没有使用这个API的经验,但是updateMonitor中的零应该作为字符串传递吗?如果是这样,那么URL也可能需要与URL兼容。使用以下命令检查其是否兼容:


我希望你能解决这个问题。

第19行是哪一行?@Colonelthirty抱歉,我打错了;我是说11。