中间件逻辑: 判断关注的用户是否存在,只有有存在的情况才给予关注,不存在的情况下,显示用户不存在。
在写关注接口中间件的时候报了一个这么的错:
Cast to ObjectId failed for value "615277fe89399e92589fc" (type string) at path "following"
数据库models:
following:{
type:[{type: Schema.Types.ObjectId, ref:'User'}],
select:false
}
原因是因为地址栏要关注的id和mongoose生成的_id数据类型不同所以导致不能正常进行搜索用户是否存在:
错误代码:
async checkUserExist(ctx, next){
console.log( mongoose.Types.ObjectId.isValid(ctx.params.id))
const user = await User.findById(ctx.params.id)
if(!user){ctx.throw(404,"用户不存在!")}
await next()
}
修改代码:
async checkUserExist(ctx, next){
if(!mongoose.Types.ObjectId.isValid(ctx.params.id)){
ctx.throw(404,'用户不存在!')
}
await next()
}
判断类型是否和mongoose生成的数据类型是否一致是返回true,不是返回false:
mongoose.Types.ObjectId.isValid(ctx.params.id)