Meteor-Mongo:findone

时间:2017-03-07 17:46:37

标签: mongodb meteor

我正在尝试使用meteor-mongo中的findOne处理错误。

this stackoverflow question开始,我似乎可以通过执行collection.findOne({query}, function(err, result){ <handleError> }来处理错误,但这样做会导致错误消息:

  

“匹配错误:Match.OneOf,Match.Maybe或Match.Optional验证失败”

以下代码有效:

export default createContainer((props) => {
  let theID = props.params.theID;
  Meteor.subscribe('thePubSub');
  return {
    x: theData.findOne({_id: theID}),
  };
}, App);

以下代码不会:

export default createContainer((props) => {
  let theID = props.params.theID;
  Meteor.subscribe('thePubSub');
  return {
    x: theData.findOne({_id: theID}, function(err,result){
      if(!result){
        return {}
      };
    }),
  };
}, App);

我做错了什么,我应该如何解决这个错误?这是一个特定于流星的错误吗?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您正在尝试使用回调处理什么样的错误?

Meteor's findOne与您链接的帖子所使用的节点mongodb驱动程序findOne不同。

预期的签名是:

  

collection.findOne([selector],[options])

不涉及回调,因为该方法同步运行(但是被动反应)。

如果要在找不到文档时返回默认值,可以使用JS逻辑OR:

// Provide an alternative value on the right that will be used
// if the left one is falsy.
theData.findOne({_id: theID}) || {};

更严格的方法是将其类型与

进行比较
typeof queryResult === 'undefined'

请注意,如果theData收集由上述订阅Meteor.subscribe('thePubSub')提供,我怀疑Meteor是否有时间在您查询时填充客户端上的收藏...