当我尝试通过用户 ID 获取时,我的项目出现两个错误。
CastError: Cast to ObjectId failed for value "user" (type string) at path "_id" for model "Party"
at model.Query.exec (/home/emi/ffpf/node_modules/mongoose/lib/query.js:4927:21)
at Query.findOne (/home/emi/ffpf/node_modules/mongoose/lib/query.js:2628:8)
at Function.findOne (/home/emi/ffpf/node_modules/mongoose/lib/model.js:2379:13)
at /home/emi/ffpf/routes/partyRouter.js:19:9
at Layer.handle [as handle_request] (/home/emi/ffpf/node_modules/express/lib/router/layer.js:95:5)
at next (/home/emi/ffpf/node_modules/express/lib/router/route.js:144:13)
at Route.dispatch (/home/emi/ffpf/node_modules/express/lib/router/route.js:114:3)
at Layer.handle [as handle_request] (/home/emi/ffpf/node_modules/express/lib/router/layer.js:95:5)
at /home/emi/ffpf/node_modules/express/lib/router/index.js:284:15
at param (/home/emi/ffpf/node_modules/express/lib/router/index.js:365:14) {
messageFormat: undefined,
stringValue: '"user"',
kind: 'ObjectId',
value: 'user',
path: '_id',
reason: BSONTypeError: Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer
at new BSONTypeError (/home/emi/ffpf/node_modules/bson/lib/error.js:41:28)
at new ObjectId (/home/emi/ffpf/node_modules/bson/lib/objectid.js:67:23)
at castObjectId (/home/emi/ffpf/node_modules/mongoose/lib/cast/objectid.js:25:12)
at ObjectId.cast (/home/emi/ffpf/node_modules/mongoose/lib/schema/objectid.js:246:12)
at SchemaType.applySetters (/home/emi/ffpf/node_modules/mongoose/lib/schematype.js:1201:12)
at SchemaType._castForQuery (/home/emi/ffpf/node_modules/mongoose/lib/schematype.js:1648:15)
at SchemaType.castForQuery (/home/emi/ffpf/node_modules/mongoose/lib/schematype.js:1636:15)
at SchemaType.castForQueryWrapper (/home/emi/ffpf/node_modules/mongoose/lib/schematype.js:1612:20)
at cast (/home/emi/ffpf/node_modules/mongoose/lib/cast.js:342:32)
at Query.cast (/home/emi/ffpf/node_modules/mongoose/lib/query.js:5357:12),
valueType: 'string'
}
我在 MongoDBCompass 中拉取了用户的 ObjectId,它是 用户:ObjectId('645d605091c8e45baaa4be4e')
派对本身的_id是ObjectId('645d607391c8e45baaa4be51')
这些好像不错吧?
partyRouter.js
const express = require("express")
const partyRouter = express.Router()
const Party = require('../models/parties.js')
// Get parties by user id
partyRouter.get("/user", (req, res, next) => {
console.log(req.auth._id, "id")
Party.find({ user: req.auth._id }, (err, parties) => {
if(err){
res.status(500)
return next(err)
}
console.log(parties, "parties")
return res.status(200).send(parties)
})
})
parties.js
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const partySchema = new Schema({
title: {
type: String,
required: true
},
description: {
type: String,
required: true
},
eventStartTime: {
type: Date,
required: true
},
rolesNeeded: {
type: Array,
default: "any"
},
user: {
type: Schema.Types.ObjectId,
ref: "User",
required: true
}
})
module.exports = mongoose.model("Party", partySchema)
server.js
app.use('/auth', require('./routes/authRouter.js'))
app.use('/api', expressjwt({ secret: process.env.SECRET, algorithms: ['HS256']})) // req.user
app.use('/api/parties', require('./routes/partyRouter.js'))
关于此的任何帮助都会很棒,因为我是全新的,我认为我大部分设置正确并且我确信我在某处遗漏了一些简单的东西,因为这是我后端唯一无法正常工作的部分邮差。感谢您尝试帮助我缓解头痛!
我已经尝试从 Party 路由器中完全删除 ObjectId,但由于某种原因,我一直遇到同样的错误。我还重新启动了我的服务器,完全删除了集合,以及其他几件事。