云函数定义保存对象的函数,本地调试出错。

建议升级 lean-cli 至最新版,然后访问 http://localhost:3001 云引擎云函数和 Hook 函数调试界面,看看能不能复现这个错误。

如果可以复现,请将报错信息贴一下。

```
使用三个反引号,可以保留代码和报错信息的缩进
```

你好,还是这样。 最新版本是 0.20.1吗?

File "/usr/local/Cellar/python@2/2.7.16/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/leancloud/engine/leanengine.py", line 128, in dispatch_request
result = {'result': dispatch_cloud_func(self.cloud_codes, app_params, decode_object=False, **values)}
File "/usr/local/Cellar/python@2/2.7.16/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/leancloud/engine/leanengine.py", line 222, in dispatch_cloud_func
result = func(**params)
File "/Users/caishaolong/GAME_GRADING_TEST/cloudFun/add.py", line 23, in saveFeedbackGame
feedback_game.save()
File "/usr/local/Cellar/python@2/2.7.16/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/leancloud/object_.py", line 235, in save
response = client.post('/classes/{0}?fetchWhenSave={1}'.format(self.classname, fetch_when_save), data)
File "/usr/local/Cellar/python@2/2.7.16/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/leancloud/client.py", line 96, in new_func
return func(headers=headers, *args, **kwargs)
File "/usr/local/Cellar/python@2/2.7.16/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/leancloud/client.py", line 161, in new_func
raise leancloud.LeanCloudError(content.get('code', 1), content.get('error', 'Unknown Error'))
LeanCloudError: LeanCloudError: [142] Cloud Code validation failed. Error detail : Cloud Code script had an error.

lean-cli 最新版本是 0.20.1

我这边没能复现您的问题。

我的复现步骤如下:

我在 lean init 生成的示例项目的 cloud.py 中加入了 saveFeedbackGame 函数定义:

@engine.define
def saveFeedbackGame():
  Feedback_game = leancloud.Object.extend('feedback_game')
  feedback_game = Feedback_game()
  feedback_game.set('gameName', '1111')
  feedback_game.save()

(顺便说下,下次代码烦请用 ``` 包裹下。贴图的话,想要复现还要手打代码。)

然后我在本地调试环境 lean up 后通过 localhost:3001 调用,以及部署到云引擎后通过 REST API 调用测试,都能成功运行 saveFeedbackGame 云函数,返回结果均为:

{
  "result": null
}

因为 saveFeedbackGame 是一个返回 None 的 void 函数,所以这个返回是符合预期的。然后在控制台存储部分,也能看到保存的 feedback_game

{
  "gameName": "1111",
  "ACL": {
    "*": {
      "read": true,
      "write": true
    }
  },
  "objectId": "5c8b4ea712215f007242a690",
  "createdAt": "2019-03-15T07:05:11.638Z",
  "updatedAt": "2019-03-15T07:05:11.638Z"
}

建议参考 云引擎文档 排查下项目配置方面是否存在问题。

您好,很奇怪,我换了一个应用也成功了,一摸一样的代码。但是就是这个应用保存不了,但我在保存不了的应用换了一个表名保存后就可以了。

换回feedback_game这个表名就会报错,只有这个应用会。

id是这个:eOueTxOFpE31gMeRURN0oHOu-gzGzoHsz

如果是这样的话,可能是数据类型锁定的问题。之前可能往 feedback_game 表里填过其他 schema 的数据,然后现在的 schema 和先前的冲突。