【问题标题】:Parse.Cloud.beforeSave not working / Parse-ServerParse.Cloud.beforeSave 不工作 / Parse-Server
【发布时间】:2016-11-24 10:38:12
【问题描述】:

我几乎完成了从 Parse.com 将 Objective-C iOS 应用程序迁移到自托管 Parse-Server 的工作。 但是在进行一些检查时,我注意到我的云函数Parse.Cloud.beforeSave 没有执行,或者至少没有完成它的所有工作。 为什么会这样?

我要添加记录的集合(MyCollection)已按预期更新,但我有第二个集合(用于记账),我正在更新(以保留最后插入项目的编号),并且没有完成。

供参考,功能代码如下:

Parse.Cloud.beforeSave
("MyCollection", function(request, response)
 {
 var queryConfig;

 var queryConfig = new Parse.Query("BooKeep");
 queryConfig.find({
                  success: function(resultConf) {
                  request.object.set("..", resultConf[0].get("...")+1); // This is done as expected.
                  resultConf[0].set("...", resultConf[0].get("...")+1); // Not done!
                  request.object.set("...", resultConf[0].get("...")+1); // This is done as expected.
                  resultConf[0].set("....", resultConf[0].get("...")+1); // Not done!
                  resultConf[0].save(null,{}); // Not done!
                  ....
                  response.success();
                  },
                  error: function() {
                  var reptMsg="The BooKeep-UPDATE procedure failed for some reason.";
                  console.log(reptMsg);
                  response.error(reptMsg);
                  }
                  });
  });

进一步调查,在日志中显示以下内容。至少现在我知道 Parse.Cloud.beforeSave 已运行,我之前不太确定。

 app[web.1]: info: beforeSave triggered for MyCollection for user Yacb6CzuB9:
 app[web.1]:   Input: {....}
 app[web.1]:   Result: {"object":{....}} className=MyCollection, triggerType=beforeSave, user=Yacb6CzuB9
 app[web.1]: error: Error generating response. { [Error: unauthorized: master key is required] status: 403, message: 'unauthorized: master key is required' } status=403, message=unauthorized: master key is required
 app[web.1]: Error: unauthorized: master key is required
 app[web.1]:     at promiseEnforceMasterKeyAccess (/app/node_modules/parse-server/lib/middlewares.js:297:17)
 app[web.1]:     at /app/node_modules/parse-server/lib/PromiseRouter.js:137:22
 app[web.1]:     at process._tickDomainCallback (internal/process/next_tick.js:129:7)
 app[web.1]: error: Error generating response. ParseError {
 app[web.1]:   code: 119,
 app[web.1]:   message: 'Permission denied for action update on class BooKeep.' } code=119, message=Permission denied for action update on class BooKeep.
 app[web.1]: [object Object]
 heroku[router]: at=info method=POST path="/parse/classes/BooKeep/JKKmaSzi8H" host=myapp.herokuapp.com request_id=1348711c-25df-4f6e-005b-70632776742d fwd="54.90.99.197" dyno=web.1 connect=0ms service=34ms status=400 bytes=573
2016-11-25T02:47:58.488404+00:00 heroku[router]: at=info method=POST path="/parse/logout" host=myapp.herokuapp.com request_id=dc3b12d1-5f54-11f0-a8cd-54ceca331a80 fwd="106.130.44.123" dyno=web.1 connect=0ms service=23ms status=200 bytes=483

【问题讨论】:

  • 您使用的是哪个版本的解析服务器?
  • 如何检查?前几天才收到的,估计是最新的了。
  • 我运行的 Parse 命令行界面是 3.0.2 版。我刚刚运行了解析更新,我现在使用的是 3.0.5 版。我不确定它是否与我的问题有关。
  • 我编辑了我的帖子以包含更多信息。

标签: ios parse-platform parse-cloud-code parse-server


【解决方案1】:

我已经能够通过转到 _SCHEMA 集合并进行更改来使其工作:

    "update": {
        "Yacb6CzuB9": true
    },

到:

    "update": {
        "*": true,
        "Yacb6CzuB9": true
    },

对于 BooKeep 类。

我仍然不太明白为什么我必须这样做,因为我不需要每个人都拥有更新权限,但事实是它现在可以工作了。 如果有人可以发表评论并指出更好的解决方案,我会很高兴。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 2020-02-13
    • 2016-05-18
    相关资源
    最近更新 更多