Meteor:匹配错误:Match.OneOf或Match.Optional验证失败(websocket)

时间:2014-09-29 16:49:34

标签: meteor websocket openshift

我有一个使用Meteor 0.9的网站。我已经在OpenShift(http://www.truthpecker.com)上部署了这个网站。

我遇到的问题是,当我去我的网站(/ discover)上的路径时,有时(虽然不总是),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]

任何人都可以帮助我消除此错误并使网站正常工作吗?我将非常感激!

P.S。:我从未使用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"
}

当我在mongo shell中第41行运行查询时,出现以下错误:

error: { "$err" : "Unsupported projection option: timeStamp", "code" : 13097 }

我不知道为什么会这样。你也可以帮助我吗?谢谢。

3 个答案:

答案 0 :(得分:6)

确保将整数传递给skiplimit。如果需要,请使用parseInt()

答案 1 :(得分:0)

您的网站上有一个与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。您可能希望使用调试器来查看它实际上是什么。

答案 2 :(得分:0)

我认为您不能在客户端查找查询中使用limit。从我的查询中删除limit可以解决问题。如果您正在寻找分页,则可以通过将参数传递到“活动”发布来手动滚动自己,以便将限制与偏移量一起添加到服务器端查询中。还有this pagination package