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



我有一个路由/api/:id,其中:id必须是ObjectId类型。因为以下是我正在运行的查询

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

如果:id的类型是ObjectId,但如果用户显式运行api(比如/api/anything(,则Mongoose会通过错误

CastError:值"转换为ObjectId失败;任何东西";在路径"_id";

因此,我想检查req.params.id是否属于ObjectId类型,并且仅当它是时才执行进一步的操作。

因此代码看起来像

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

使用Mongoose功能:

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方法验证对象id

猫鼬.Types.ObjectId.isValid('63d632828e944c3a08f15925'(

可以使用try ... catch时为什么选择if

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

最新更新