0

我的表弟和我一直在试验他的新 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 值)”——但只有当 Photon 是连接的。

4

1 回答 1

0

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

returnData 很可能为零。

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

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

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

故障排除步骤

因此,正如我之前提到的,您需要在调用tostringon时添加一个 print 语句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"

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

我希望你能找出问题所在。

于 2016-01-10T06:26:00.830 回答