首页 > 解决方案 > 如何在 Node.js 中检查字符串是否属于 ObjectId 类型

问题描述

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

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

如果 :id 是类型,它可以正常工作,ObjectId但如果用户明确运行 api 可以说/api/anything,那么 Mongoose 会出现错误

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

所以,我想检查是否req.params.id是类型ObjectId并仅在它是时执行进一步的操作。

因此代码看起来像

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

标签: javascriptnode.jsmongoose

解决方案


使用猫鼬功能:

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

推荐阅读