mongoose 报 CastError: Cast to ObjectId failed for value

712 阅读1分钟

中间件逻辑: 判断关注的用户是否存在,只有有存在的情况才给予关注,不存在的情况下,显示用户不存在。

在写关注接口中间件的时候报了一个这么的错:

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)