javascript - 如何在 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})
}
解决方案
使用猫鼬功能:
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
推荐阅读
- c++ - 遍历链表时无限循环
- reactjs - 如何从图表中显示当前值?
- laravel - 从存储文件夹返回图像
- django - Django:在登录模板上显示不同的标题
- python - read_csv:我的所有数据都被读取为对象/字符串
- css - 将鼠标悬停在父元素上时如何更改首字母的 CSS 样式?
- awk - 根据第一列内容分隔字段,在第二列中匹配并在 awk 中减去第四列值
- python - 将列表中的 1 个数组分配给 var,并将列表中的其余数组分配给另一个 var
- php - Laravel 路由失败
- docker - 如何将 Sample Logstash docker 容器链接到 Elastics 网站上的 Sample Elasticsearch 集群?