4

Collection2的文档解释了如何创建Schema以及如何将 Schema 附加到集合,但我认为缺少插入/更新表单、错误处理且没有自动表单的完整工作示例。

如何更改现有项目以使用 Collection2?具体来说:

  • 我还需要check(Meteor.userId(), String);吗?
  • 我不再需要打电话check()了吗?
  • 我可以删除我的验证码吗?我只需调用insert(),Collection2 将通过架构捕获所有错误?
  • 还有什么我应该改变的吗?

这里是来自 DiscoverMeteor 的示例代码:

Meteor.methods({
  postInsert: function(postAttributes) {
    check(Meteor.userId(), String);
    check(postAttributes, {
      title: String,
      url: String
    });

    var errors = validatePost(postAttributes);
    if(errors.title || errors.url) {
      throw new Meteor.Error('invalid-post', 'Set a title and valid URL for your post');
    }

    var user = Meteor.user();
    var post = _.extend(postAttributes, {
      userId: user._id,
      author: user.username,
      submitted: new Date(),
      commentsCount: 0
    });

    var postId = Posts.insert(post);

    return {
      _id: postId
    };
  }
});

validatePost = function(post) {
  var errors = {};

  if(!post.title) {
    errors.title = "Please fill in a headline";
  }
  if(!post.url) {
    errors.url = "Please fill in a URL";
  } else if(post.url.substr(0, 7) != "http://" && post.url.substr(0, 8) != "https://") {
    errors.url = "URLs must begin with http:// or https://";
  }
  return errors;
}

当更新为使用 Collection2 时,这段代码会是什么样子?

4

1 回答 1

1

我和你在同一条船上,我基本上使用 autoform 来执行keyUp验证,就是这样。简而言之,collection2 将运行 _.pick 的等效项,跳过空字符串,尝试将输入强制转换为模式类型,验证文档,并运行模式自动值函数。

check()不会尝试强制值,因此在某些极端情况下,它很有用,但通常没有必要。

它的验证只不过是阻止插入。因此,您仍然需要一些代码来改善用户体验并向他们展示您已经掌握的问题所在。

于 2015-02-21T19:35:37.090 回答