Mongodb Mongo User.find return;错误:传入的参数必须是12字节的单个字符串或24个十六进制字符的字符串;
我的Express路由器如下所示: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) }
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'