Meteor update等操作失败原因及解决方法

Meteor 提供了两个 MongoDB 数据库:1个客户端缓存数据库和服务器上的1个 MongoDB 数据库。当1个用户更改1些数据时(例如通过单击 Save),在阅读器中运行的 JavaScript 代码会更新本地 MongoDB 中的相应的数据库项,然后向服务器发出1个 DDP 要求。该代码立即像操作已取得成功那样继续运行,由于它不需要等待服务器回复。与此同时,服务器在后台更新。如果服务器操作失败或返回1个意外结果,那末客户端 JavaScript 代码会根据从服务器新返回的数据立即进行调剂。

昨天写代码的时候发现,发现有1个update操作总是失败,而也没有甚么毛病提示,只显示个error。找了很久找不到问题出在哪。
这里写图片描述

然后去读官方文档,它是这样写的:


文档中关于update的说明:
collection.update(selector, modifier, [options], [callback]) Anywhere

Modify one or more documents in the collection

Arguments

selector Mongo selector, or object id

Specifies which documents to modify

modifier Mongo modifier

Specifies how to modify the documents

callback Function

Optional. If present, called with an error object as its argument.

Options

multi Boolean

True to modify all matching documents; false to only modify one of the matching documents (the default).

再查看1次我写的代码,应当没错的。然后再mongodb的命令行工具上试试履行一样语句也是可以的,因而我就觉得是Meteor的相干设置问题。

再往文档中细看,发现问题了:


The behavior of update differs depending on whether it is called by trusted or untrusted code. Trusted code includes server code and method code. Untrusted code includes client-side code such as event handlers and a browser’s JavaScript console.

  • Trusted code can modify multiple documents at once by setting multi to true, and can use an arbitrary Mongo selector to find the documents to modify. It bypasses any access control rules set up by allow and deny.

  • Untrusted code can only modify a single document at once, specified by its _id. The modification is allowed only after checking any applicable allow and deny rules.


原来为了安全性,Meteor限制了在客户端下默许的对数据库的操作,对insert,update,remove等操作的selector只能为 _id,并且不能使用mutil等,所以我写的那条update语句的毛病在于selector用了_id外的条件。所以看来解决方法有两个:

  • 在客户端只是用_id作为selector的操作,明显这样不方便
  • 在服务器端写allow规则, 允许客户端直接对数据库进行这些操作

文档中关于allow的说明:
collection.allow(options) Server

Allow users to write directly to this collection from client code, subject to limitations you define.
Options

insert, update, remove Function

Functions that look at a proposed modification to the database and return true if it should be allowed.

因而写了相干的allow规则, 让他在某个情况下return true就能够了

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » Meteor update等操作失败原因及解决方法

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡