Javascript mongodb isValid函数为无效objectid返回true
因此,我必须检查给定的输入是否是有效的Javascript mongodb isValid函数为无效objectid返回true,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,因此,我必须检查给定的输入是否是有效的ObjectID,如果返回true,我想将该值转换为ObjectID。不幸的是,验证为“zzzzzzzz”返回true,并在转换值时引发异常 我得到以下错误 错误:传入的参数必须是12字节的单个字符串或 由24个十六进制字符组成的字符串 我试图重现这个问题: const { ObjectID } = require("mongodb"); const value = "zzzzzzzzzzzz"; const isValid = ObjectID.isVa
ObjectID
,如果返回true
,我想将该值转换为ObjectID
。不幸的是,验证为“zzzzzzzz”返回true,并在转换值时引发异常
我得到以下错误
错误:传入的参数必须是12字节的单个字符串或
由24个十六进制字符组成的字符串
我试图重现这个问题:
const { ObjectID } = require("mongodb");
const value = "zzzzzzzzzzzz";
const isValid = ObjectID.isValid(value);
if (!isValid) { // this is true
throw new Error("invalid ID");
}
ObjectID.createFromHexString(value); // throws exception
那么,为什么验证返回true
?我怎样才能解决这个问题?我真正的项目是一个NestJs应用程序,因此最好将类型为any
的值强制转换为类型安全的ObjectID
那么,为什么验证返回真值呢
因为。第338行
基本上,对ObjectID
构造函数的任何有效输入都将返回true,并带有ObjectID.isValid()
因此,对于您的情况,ObjectID.isValid(“zzzzzzzz”)
是正确的,因为newobjectid(“zzzzzzzzzz”)
是有效的操作
这个怎么样:
const { ObjectID } = require("mongodb");
function isValidObjectID(id) {
try{
ObjectID.createFromHexString(id)
}catch(e){
return false
}
return true
}
console.log(`zzzzzzzzzzzz
isValid: ${isValidObjectID("zzzzzzzzzzzz")}`) // false
console.log(`5beec2f547643846af1d4dc3
isValid: ${isValidObjectID("5beec2f547643846af1d4dc3")}`) // true
那么,为什么验证返回真值呢
因为。第338行
基本上,对ObjectID
构造函数的任何有效输入都将返回true,并带有ObjectID.isValid()
因此,对于您的情况,ObjectID.isValid(“zzzzzzzz”)
是正确的,因为newobjectid(“zzzzzzzzzz”)
是有效的操作
这个怎么样:
const { ObjectID } = require("mongodb");
function isValidObjectID(id) {
try{
ObjectID.createFromHexString(id)
}catch(e){
return false
}
return true
}
console.log(`zzzzzzzzzzzz
isValid: ${isValidObjectID("zzzzzzzzzzzz")}`) // false
console.log(`5beec2f547643846af1d4dc3
isValid: ${isValidObjectID("5beec2f547643846af1d4dc3")}`) // true
嗯,是的,我可以忽略验证:)嗯,是的,我可以忽略验证:)