【问题标题】:Lua indexing nil value when posting data to Particle (formerly Spark) Photon将数据发布到 Particle(以前的 Spark)Photon 时 Lua 索引 nil 值
【发布时间】:2016-01-10 14:31:48
【问题描述】:

我的表弟和我一直在试验他的新 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

(其余代码看起来与省略号相同)

我们试图将字符串传递给将驱动电机的 Photon 函数,但每次我们创建一个红石信号时,它都会显示“Drive:11:尝试索引?(一个 nil 值)”——但只有当光子已连接。

【问题讨论】:

  • 第 19 行是哪一行?
  • @ColonelThirtyTwo 抱歉,我打错了;我的意思是 11。

标签: http lua minecraft photon computercraft


【解决方案1】:

我建议添加 print( tostring( returnData ) ) 并告诉我们打印的内容。

returnData 很可能为 nil。

这里有一些关于 HTTP 句柄的信息:

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

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

问题排查步骤

所以,正如我之前提到的,您需要添加一个打印语句,在 returnData 上调用 tostring。它应该返回一个句柄,您可以对其执行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"

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

希望你能解决问题。

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 2019-03-01
    • 2019-08-21
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多