在我的一些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
任何帮助非常感谢!
答案 0 :(得分:10)
而不是:
check(someObjectId, Meteor.Collection.ObjectID());
请不要使用括号:
check(someObjectId, Meteor.Collection.ObjectID);
编辑 -
请注意,此检查的错误消息并不理想。
check({}, Meteor.Collection.ObjectID);
// Error: Match error: Expected
你可以假设消息应该是
// Error: Match error: Expected ObjectId, got object
您可以在检查包的此代码段中看到这种情况发生的原因。
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);
}
Meteor.Collection.ObjectID
没有name
属性。
答案 1 :(得分:2)
作为替代解决方案,您可以简单地将十六进制字符串作为参数而不是ObjectID传递。
var idValidator = Match.Where(function (id) {
check(id, String);
return /[0-9a-fA-F]{24}/.test(id);
});
check(new Meteor.Collection.ObjectID()._str, idValidator);
// success
check('', idValidator);
// Error: Match error: Failed Match.Where validation
check({}, idValidator);
// Error: Match error: Expected string, got object
check([], idValidator);
// Error: Match error: Expected string, got object <--- bug? I expect array
注意,这个正则表达式是从这里开始的。
https://github.com/mongodb/js-bson/blob/master/lib/bson/objectid.js
答案 2 :(得分:1)
您应该使用以下来生成随机ObjectID:
var someObjectId = new Meteor.Collection.ObjectID();
正如Cuberto所说,你可以通过Meteor.Collection.ObjectID
检查它:
check(someObjectId, Meteor.Collection.ObjectID)
答案 3 :(得分:1)
通常在使用check()
时,您无法生成新的Meteor _id
。这是使用Match.check()
首先使用:
扩展Match
对象
Match._id = Match.Where(function (id) {
check(id, String);
return /[a-zA-Z0-9]{17,17}/.test(id);
});
这很有用,因为您可能会在许多方法中检查_id
。
现在简单地说:
check(_id,Match._id);
答案 4 :(得分:0)
完整回答原始问题:
首先,为参数数组中的单个对象定义匹配器:
Match._id = Match.Where(function (id) {
check(id, String);
return /[a-zA-Z0-9]{17,17}/.test(id);
});
然后你可以打电话:
check(MyArrayOfArguments, [Match._id])