繁体   English   中英

如何检查Node.js中的字符串是否为ObjectId类型

[英]How to check if string is of type ObjectId in Node.js

我有一条路线/api/:id where:id 必须是 ObjectId 类型。 因为以下是我正在运行的查询

const data = await Person.find({_id:req.params.id})

它工作正常如果:id 是类型ObjectId但如果用户显式运行 api 让我们说/api/anything ,然后 Mongoose 通过错误

CastError:转换为 ObjectId 失败,因为路径“_id”中的值“anything”

因此,我想检查req.params.id是否属于ObjectId类型,只有在是的情况下才执行进一步的操作。

因此代码看起来像

if(checkObjectId(req.params.id)) {
const data = await Person.find({_id:req.params.id})
}

使用猫鼬功能:

if(mongoose.isValidObjectId(req.params.id)) {
  const data = await Person.find({_id:req.params.id})
  ...
}

Mongoose.prototype.isValidObjectId()

如果 Mongoose 可以将给定的值转换为 ObjectId,则返回 true,否则返回 false。

 mongoose.isValidObjectId(new mongoose.Types.ObjectId()); // true mongoose.isValidObjectId('0123456789ab'); // true mongoose.isValidObjectId(6); // false

您可以使用 isValid 方法来验证 object id

mongoose.Types.ObjectId.isValid('63d632828e944c3a08f15925')

为什么if你可以使用try ... catch

let data;
try {
    data = await Person.find({_id:req.params.id})
} catch(err) {
    console.log('Error retrieving data (Person):', err);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM