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

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

昨天写代码的时候发现,发现有一个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).


再查看一次我写的代码,应该没错的。然后再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就可以了

时间: 2024-10-19 11:04:27

Meteor update等操作失败原因及解决方法的相关文章

TI CC2540 USB CDC Serial Port驱动安装失败原因及解决方法

买了款具有iBeacon基站功能的USB串口适配器,设备是基于TI公司CC2540芯片的. 一般来说,安装这设备的驱动就像我们用无线鼠标那样,插入USB接口后windows就自动安装了,但是新买的这设备没有,足足弄了好几天(win7 32位,msdn版),才发现是windows update自动更新被我关闭的原因. 驱动安装失败症状如图1,设备管理器里多了个感叹号,手动安装则提示“已找到该设备的驱动程序软件,但在试图安装它时遇到错误,系统知不道指定软件” 图一: 安装失败 进入控制面板--win

AsyncTasLoader不进行加载操作的原因及解决方法

使用AsyncTaskLoader加载数据.但是LoadInBackground却不会被回调.这是什么情况?我要怎么解决这个问题?如果你和我一样有这样的疑问.你可以移步至我的blog的这篇文章找到答案. 文章地址: http://kohoh1992.github.io/AsyncTaskLoaderDontWork/ 哦,对了.忘记补充了,这里的文章全部都是我个人blog上的副本.如果你对我的blog有兴趣,请移步至 http://kohoh1992.github.io

数据库连接失败的原因及解决方法

各种业务系统在使用过程中都会遇到一些问题,因数据库连接失败,不能登录管理软件就是其中之一,这个很令人头疼而且常见的问题 一般的业务系统均采用的是SQL数据库,我们这里总结了SQL数据库连接失败的原因和解决方法: 原因一:登录账号.密码.服务器名称.数据库名称登录错误导致不能连接,这个比较常见,仔细检查好所填信息是否正确,填写正确一般就可以解决. 解决方法:当正在使用的软件出现数据库不能连接时,一般就是服务器名出现问题,更改服务器名称一般可以解决问题.数据库如果是安装在本机,服务器名可以用".&q

java.sql.SQLException: Field 'id' doesn't have a default value(用eclipse操作数据库时报了这种奇怪的错误)的原因与解决方法

1.错误原因 由于id在数据库表中是作为主键,但是在插入的过程中,没有给予数值,并且没有让其自增 2.解决办法 修改数据库表中的id,让其自增(在插入的过程中,不插入id数据时) java.sql.SQLException: Field 'id' doesn't have a default value(用eclipse操作数据库时报了这种奇怪的错误)的原因与解决方法 原文地址:https://www.cnblogs.com/zyt-bg/p/8385972.html

coreseek常见错误原因及解决方法

coreseek常见错误原因及解决方法 Coreseek 中文全文检索引擎 Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索.论坛/站内搜索.数据库搜索.文档/文献检索.信息检索.数据挖掘等应用场景,用户可以免费下载使用 本文为大家整理了coreseek/sphinx中文检索引擎的常见问题和解决方法,感兴趣的同学参考下. Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协

Hyper-V虚拟机启动时报“账户没有足够的权限打开VHD文件”原因及解决方法

前段时间,准备做一套Exchange Server 2010仿真环境,用于后期企业内各项变更及平台上线时测试工作,由于需要准备的服务器较多,一台一台装虚机,感谢非常费时间,所以想到,做一个模版来快速完成虚拟机部署工作,大概的过程我想大家也有做过,就是装一台Hyper-V虚机,然后把VHD硬盘文件拷贝出来,分别替换所有建好没有系统的虚拟机硬盘,看似简单,但是在实际操作时发现,模版硬盘没有被识别?各种报错,如下图所示: 当看到上图所示这些报错时,很不理解,已经将这台机器的VHD文件指向了新拷入的模版

Java并发编程:Java ConcurrentModificationException异常原因和解决方法

Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常.下面我们就来讨论以下这个异常出现的原因以及解决办法. 以下是本文目录大纲: 一.ConcurrentModificationException异常出现的原因 二.在单线程环境下的解决办法 三.在多线程环境下的解决方法 若有不

Nginx 502 Bad Gateway 错误的原因及解决方法

http://my.oschina.net/zhouyuan/blog/118708 刚才在调试程序的时候,居然服务器502错误,昨天晚上也发生了,好像我没有做非常规的操作. 然后网上寻找了下答案, 把一些原因及解决方法汇总一下,以防生产环境下的502  会有好多种情况出现502错误,下面我们分情况来说一下. 一.fastcgi缓冲区设置过小 出现错误,首先要查找nginx的日志文件,目录为/var/log/nginx,在日志中发现了如下错误. 2013/01/17 13:33:47 [erro

phpStudy启动失败时的解决方法 提示缺vc9运行库

php5.3.5.4和apache都是用vc9编译,电脑必须安装vc9运行库才能运行. php5.5.5.6是vc11编译,如用php5.5.5.6必须安装vc11运行库. php7.0.7.1是vc14编译,如用php7.0.7.1必须安装vc14运行库. vc9和vc11运行库下载:https://pan.baidu.com/s/1dF9LslV 密码:v7ap php5.5以上才有64位的,其他均为32位.所以64位的系统最好把32位的运行库也安装上. 如果您下载的是32位的phpStud