我有一个使用Meteor 0.9的网站。我已经在OpenShift上部署了这个网站(http://www.truthpecker.com)。
我遇到的问题是,当我去我的网站上的一条路径(/decover)时,有时(尽管并不总是),Meteor无法获取所需的数据。相反,我得到了以下错误:
在客户端:
WebSocket connection to 'ws://www.truthpecker.com/sockjs/796/3tfowlag/websocket' failed: Error during WebSocket handshake: Unexpected response code: 400
在服务器端:
Exception from sub rD8cj6FGa6bpTDivh Error: Match error: Failed Match.OneOf or Match.Optional validation
at checkSubtree (packages/check/match.js:222)
at check (packages/check/match.js:21)
at _.extend._getFindOptions (packages/mongo-livedata/collection.js:216)
at _.extend.find (packages/mongo-livedata/collection.js:236)
at Meteor.publish.Activities.find.user [as _handler] (app/server/publications.js:41:19)
at maybeAuditArgumentChecks (packages/livedata/livedata_server.js:1492)
at _.extend._runHandler (packages/livedata/livedata_server.js:914)
at _.extend._startSubscription (packages/livedata/livedata_server.js:764)
at _.extend.protocol_handlers.sub (packages/livedata/livedata_server.js:577)
at packages/livedata/livedata_server.js:541
Sanitized and reported to the client as: Match failed [400]
有人能帮我消除这个错误并让网站正常工作吗?我会非常感激的!
Tony
附言:我在使用localhost时从未遇到过这个错误。
编辑:
导致问题的线路问题是这样的(线路41):
return Activities.find({user: id}, {sort: {timeStamp: -1}, limit:40});
活动集合中的一个文档如下所示:
{
"user" : "ZJrgYm34rR92zg6z7",
"type" : "editArg",
"debId" : "wtziFDS4bB3CCkNLo",
"argId" : "YAnjh2Pu6QESzHQLH",
"timeStamp" : ISODate("2014-09-12T22:10:29.586Z"),
"_id" : "sEDDreehonp67haDg"
}
当我在mongoshell中运行第41行中完成的查询时,我得到以下错误:
error: { "$err" : "Unsupported projection option: timeStamp", "code" : 13097 }
我真的不知道为什么会这样。你也能在那里帮我吗?非常感谢。
确保将一个整数传递给skip
和limit
。如果需要,请使用parseInt()
。
您的网站上有一个文档与您的check
验证不匹配。
您的验证在app/server/publications.js:41
中
因此,有问题的属性以某种方式存在,类似于Match.optional(Match.oneOf(xx))
,但文档的属性既不是Match.oneOf
中的值
您必须仔细查看导致此问题的集合的文档,并删除或更正导致此事件的属性,以匹配check
语句。
更新您的更新问题
您正在meteor mongo
/mongo shell中运行Meteor命令。您得到的错误与Meteor中的问题无关,要在mongo shell中排序,您将执行activities.find(..).sort()
,而不是activities.find(.., { sort : {..})
。这与问题无关
问题很可能是您的id
实际上不是一个字符串。它应该是您要查找的文档的sEDDreehonp67haDg
。您可能想使用调试器来查看它的实际情况。
我认为您不能在客户端查找查询中使用limit
。从我的查询中删除limit
解决了这个问题。如果您正在寻找分页,那么您可以通过向Activities发布传递参数来手动滚动自己的分页,以便将限制与偏移量一起添加到服务器端查询中。还有这个分页包。