Mongodb Mongo User.find return;错误:传入的参数必须是12字节的单个字符串或24个十六进制字符的字符串;

Mongodb Mongo User.find return;错误:传入的参数必须是12字节的单个字符串或24个十六进制字符的字符串;,mongodb,express,mongoose,Mongodb,Express,Mongoose,我的Express路由器如下所示: router.get('/user/events', verifyToken, (req, res) => { User.find({ _id: req.userId, 'signedToEvents.isActive': true }, (err, suc) => { if (err) { console.log(err) }

我的Express路由器如下所示:

router.get('/user/events', verifyToken, (req, res) => {
    User.find({
        _id: req.userId,
        'signedToEvents.isActive': true
    }, (err, suc) => {
        if (err) {
            console.log(err)
        }
        console.log(suc);
        res.status(200).send(suc)
    })
})
这对我来说似乎是对的,但它给了我错误。请解释我做错了什么。 用户ID是一个Mongo用户ID

猫鼬模式:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;


const SignedToEvents = new Schema({
    _id : Schema.Types.ObjectId,
    eventSignedDate: {type : Date, default : Date.now()},
    isActive : Boolean
})
SignedToEvents.set('toObject', { getters: true });
SignedToEvents.set('toJSON', { getters: true });

const UserSchema = new Schema({
    email: String,
    password : String,
    age : Number,
    sex : String,
    createdAt: { type: Date, default: Date.now },
    signedToEvents : [SignedToEvents]
})

UserSchema.set('toObject', { getters: true });
UserSchema.set('toJSON', { getters: true });

module.exports = mongoose.model('user', UserSchema, 'users');
对API的调用(来自Angular客户端)

getUsersEvents(){
//返回特定用户的事件
返回this.http.get(this.apiroot+'user/events');
}

您可以通过至少3种方式传递用户ID:

  • 质询
  • 路由参数
  • 饼干
如果您正在使用,该值将通过:
request.query.userId
提供

通过路由,它是:
request.params.userId


Via:
request.cookies.userId

所以问题是我有另一个类似于范围内的express路由器

router.get('/user/:challengeId'

router.get('/user/events'

无论如何,谢谢你的帮助。

嗯,应该是
req.query.userId
不是吗?不,它很好-在所有其他路由上都可以工作。如何调用API?getUsersEvents(){//返回特定用户的事件返回this.http.get(this.apiroot+'user/events');}执行
console.log时的结果是什么(请求用户ID)
Hi,谢谢回复。请求中有一个令牌,正在服务器端解码。在该令牌中存在userId。因此它来自于此。明白了。您是否在Angular应用程序的每个请求中添加令牌值?是的,正确。我已经更改了路由器的排列,现在它可以工作了。我使用ExpressJS。我在乎优先级吗他们都安排好了吗?不,那不是问题所在。你应该回答你自己的问题,这样其他人可以从中受益。
router.get('/user/events'