gpt4 book ai didi

javascript - 使用 meteor 方法但仍然出现错误

转载 作者:行者123 更新时间:2023-11-30 12:19:56 26 4
gpt4 key购买 nike

我正在使用 Meteor methods避免在客户端更新数据库但仍然出现此错误:

Uncaught Error: Not permitted. Untrusted code may only remove documents by ID. [403]

在为 accounts-ui 包配置 Facebook 和 Twitter 登录之前,我没有注意到它影响了应用程序。同样,我在客户端执行的唯一数据库操作是查找。

    if(Meteor.isClient) {
$scope.deleteTask = function(task) {
$meteor.call("deleteTask", task._id);
};
}

if(Meteor.isServer) {
Meteor.methods({
deleteTask: function (taskId) {
var task = Tasks.findOne(taskId);
if (task.owner !== Meteor.userId()) {
alert("Only a tasks owner may delete the task.")
throw new Meteor.Error("not-authorized");
}
else {
Tasks.remove(taskId);
}
}
});
}

编辑:我应该提到,即使出现该错误,该应用程序在本地主机上仍然可以正常工作,但是当我将它部署到 meteor 的测试服务器之一时,该应用程序不起作用(并且仍然显示该错误)。

最佳答案

您正在客户端上运行代码。您有两种选择可以立即解决问题:

  1. 将方法定义放在应用的 /server 目录下的文件中。
  2. 将方法定义包装在 if (Meteor.isServer) {} block 中。

实际发生错误是因为该方法正在客户端上运行(见上文)并使用非基于 id 的选择器更新集合。例如:

Posts.update({awesome: false}, {...});

而在客户端上,您只能进行如下更新:

Posts.update(postId, {...});

如果你喜欢保留latency compensation并尽可能编写一个客户端 stub ,但您需要修改您的更新,如上面第二个示例所示。

推荐阅读:Structuring your application .

关于javascript - 使用 meteor 方法但仍然出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31436155/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com