Meteor.js:当参数是Mongodb ObjectId时如何运行check()?

Pet*_*rov 13 mongodb meteor

在我的一些Meteor方法中,我将从客户端发送Mongodb ObjectId作为参数.我想通过Meteor的check()系统来运行它们,但我似乎找不到任何与它们成功匹配的东西.

我试过了

var someObjectId = Meteor.Collection.ObjectId();

check(someObjectId, Meteor.Collection.ObjectId()) // fails
check(someObjectId, { _str : String }) //fails
check(someObjectId, String) //fails
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢!

sbk*_*ing 10

代替:

check(someObjectId, Meteor.Collection.ObjectID());
Run Code Online (Sandbox Code Playgroud)

试试没有括号:

check(someObjectId, Meteor.Collection.ObjectID);
Run Code Online (Sandbox Code Playgroud)

编辑-

请注意,此检查的错误消息并不理想.

check({}, Meteor.Collection.ObjectID);
// Error: Match error: Expected
Run Code Online (Sandbox Code Playgroud)

可以假设消息应该是这样的

// Error: Match error: Expected ObjectId, got object
Run Code Online (Sandbox Code Playgroud)

您可以在check包的此片段中看到为什么会发生这种情况.

https://github.com/meteor/meteor/blob/devel/packages/check/match.js

if (pattern instanceof Function) {
    if (value instanceof pattern)
        return;
    // XXX what if .name isn't defined
    throw new Match.Error("Expected " + pattern.name);
}
Run Code Online (Sandbox Code Playgroud)

Meteor.Collection.ObjectID没有name财产.