Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mongodb isValid函数为无效objectid返回true_Javascript_Node.js_Mongodb - Fatal编程技术网

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

嗯,是的,我可以忽略验证:)嗯,是的,我可以忽略验证:)