使用流星方法,但仍然得到错误
Using Meteor Methods but still getting error
我使用Meteor方法来避免在客户端更新数据库,但仍然得到这个错误:
Uncaught Error: Not allowed。不受信任的代码只能通过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的测试服务器之一时,它不工作(并且仍然显示该错误)。
您正在客户端上运行代码。您有两个选择可以立即解决这个问题:
- 将方法定义放在应用程序
/server
目录下的文件中。 - 将方法定义封装在
if (Meteor.isServer) {}
块中。
实际的错误发生是因为该方法正在客户端上运行(见上文),并且使用非基于id的选择器更新集合。例如:
Posts.update({awesome: false}, {...});
而在客户端你只能做这样的更新:
Posts.update(postId, {...});
如果您希望保留延迟补偿并编写客户端存根,您可以这样做,但您需要修改您的更新,如上面第二个示例所示。
建议阅读:构建你的应用程序
发现它来自我的帐户-ui配置在一个完全不同的文件!
相关文章:
- 在流星上使用微信js-sdk时出现拒绝权限错误
- 角度材料和流星的控制台错误
- 流星应用程序中的按钮位置错误
- 流星 1.3 自动表单/快速表单错误
- 流星预期标识符错误
- 错误'路径保留冲突'同时启动流星应用程序
- 仅在部署时出现流星铁路由器初始屏幕错误
- SMTP 服务器给出错误.邮件未在流星应用程序中发送
- 为流星重新包装砌体会产生错误“引用错误:窗口未定义”
- 流星:引用错误:未定义要求
- 流星,如何将回调和错误传递给调用方方法
- 模板命名错别字错误的流星错误处理
- 流星 - 自定义注册.显示所有验证错误,而不是一个
- 流星.js:引用错误:窗口未定义
- 流星通过ID错误删除文档
- 使用流星应用程序设置谷歌分析:跟踪未安装错误
- 流星:错误:ENOTEMPTY:部署到模数时目录不为空
- 流星+反应”;未捕获的类型错误:无法读取属性'数据'“未定义”;
- 奇怪的流星错误:[Log]Deps重新计算函数异常:NotFoundError:DOM异常8
- 错误:流星应用的顶层依赖中有未知包