大佬教程收集整理的这篇文章主要介绍了尝试通过 populate() 获取用户信息,但返回没有错误的空数组,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试为两种类型的用户“买家和卖家”提供一种注册方法。 当我保存卖家时,我应该获得有关他们的“商店信息”的所有信息,请参阅下面我更新的代码。 我使用了 populate() 但我得到了一个空数组。 我的想法错了吗?
注册代码
exports.signupUser = async (req,res,next) => {
role = req.body.role
const user = new User(req.body)
const seller = new Seller(req.body)
try{
if(role=='seller'){
await seller.save()
await user.save()
const token = await user.generatetoken()
res.status(200).send({
error: null,APIStatus:true,data: {user,seller,token}
})
}
await user.save()
const token = await user.generatetoken()
res.status(200).send({
error: null,token}
})
}
catch(error){
res.status(400).send({
error: error.message,APIStatus:false,data: 'unauthorized user'
})
}
}
登录代码
exports.login = async (req,res) => {
try{
const user = await User.findUserByCredentials(req.body.email,req.body.password)
const token = await user.generatetoken()
console.log(user.role)
if(user.role=='seller'){
console.log(user._ID)
await User.findOne({_ID: user._ID}).populate('storeinfo').exec(function(err,user) {
if (err) {console.log(err)}
res.status(200).send({
error: null,user,token
})})
}
res.status(200).send({
error: null,data: 'Something went wrong'
})
}
}
架构用户
const userSchema = new Schema({
first_name: { type: String,required:true},last_name: { type: String,email: { type: String,unique: true,required: true,trim: true,lowercase: true,valIDate(value) {
if (!valIDator.isEmail(value)) throw new Error("InvalID Email"); },},password: { type: String,minlength: 6,match: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$/},role: { type: String,enum: ['admin','seller','user'],default: 'user',required: true},mobileNumber: { type: String,default:'',valIDate(value) {
if (!valIDator.isMobilePhone(value,["ar-EG"]))
throw new Error("invalID phone number");
},address: {
type: String,trim: true
},storeinfo:{
type: mongoose.Schema.Types.ObjectID,ref:'Seller',tokens: [{
token: {
type: String,required: true
}
}]
},{
timestamps: true
})
userSchema.methods.generatetoken = async function(){
const user = this
const token = jwt.sign({_ID: user._ID.toString(),role:user.role},process.env.JWTKEY)
user.tokens = user.tokens.concat({token})
await user.save()
return token
}
// login
userSchema.statics.findUserByCredentials = async(email,password)=>{
const user = await User.findOne({email})
if(!user) throw new Error('invalID email')
const matched = await bcrypt.compare(password,user.password)
if(!matched) throw new Error('invalID password')
return user
}
const User = mongoose.model('User',userSchema)
module.exports = User
卖家架构
const SellerSchema = new Schema(
{
storename: {
required: true,type: String,category: {
type: String,required: true
},image: {
type: String,// required: true,addresses:[
{
street: String,locality: String,aptname: String,lat: Number,lng: Number,}
],numberOfBranches: Number,_userID:{ type: Schema.Types.ObjectID,ref: 'User'},items: [{ type: Schema.Types.ObjectID,ref: "Item" }]
},{ timestamps: true }
);
const Seller = mongoose.model('Seller',SellerSchema)
module.exports = Seller
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的尝试通过 populate() 获取用户信息,但返回没有错误的空数组全部内容,希望文章能够帮你解决尝试通过 populate() 获取用户信息,但返回没有错误的空数组所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。