🔥یلدا با راکت با (( ۷۰ درصد )) تخفیف! یلدا طولانی است، اما این تخفیف نه.
مشاهده دورههاسلام،
من تازه دوره "ساخت یک وبسایت آموزشی (فروشگاهی) با Nodejs" رو شروع کردم و دارم با جلسات پیش میرم و پروژه اون رو با کمی تغییرات اجرا میکنم. متاسفانه به دلیل اینکه دوره قدیمی هست نسخه استفاده شده برخی پکیج ها ی این دوره منسوخ شدن یا اینکه dependency های اونها منسوخ شدن . من تا جلسه هفتم پیش رفتم و همه مشکلات رو با جستجو حل کردم. اما در بخش ثبت نام کاربر به دلیل تغییرات نسخه های جدید پکیج mongoose به مشکل خوردم و متاسفانه با جستجو در گوگل و استک اورفلو به جوابی نرسیدم که بتونم اون رو درک کنم. خواستم با نسخه mongoose استفاده شده در دوره و چند نسخه بعد از اون پیش برم اما تعداد زیادی از dependency های اونها منسوخ شدن و دیگه قابل نصب نیستن و در نصب ارور های زیادی میدن. گفتم اینجا بپرسم شاید دوستان بتونن من رو راهنمایی کنن
const passport = require('passport')
const localStrategy = require('passport-local').Strategy
const User = require('app/models/user')
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});
passport.use('local.register' , new localStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
} , (req , email , password , done) => {
console.log(email , password)
User.findOne({ 'email' : email } , (err , user) => {
if(err) return done(err);
if(user) return done(null , false , req.flash('errors' , 'چنین کاربری قبلا در سایت ثبت نام کرده است!'));
const newUser = new User({
name : req.body.name,
email,
mobile: req.body.mobile,
password
});
newUser.save(err => {
if(err) return done(err , false , req.flash('errors' , ' در فرایند ثبت نام خطایی رخ داده لطفاً مجدداً سعی کنید!'));
done(null , newUser);
})
})
}))
وقتی فرم ثبت نام رو ارسال میکنم ارور "MongooseError: Model.findOne() no longer accepts a callback
at Function.findOne " رو دریافت میکنم . ظاهراً در متدهای نسخه های جدید mongoose نمیشه از کال بک فانکشن ها استفاده کرد . لطفاً اگر کسی در مورد این مشکل میدونه من رو راهنمایی کنه. پیشاپیش از وقتی که میگذارید تشکر میکنم.
این مشکل رو به صورت زیر رفع کردم:
const passport = require('passport')
const localStrategy = require('passport-local').Strategy
const User = require('app/models/user')
passport.serializeUser(function(user, done) {
done(null, user._id)
})
passport.deserializeUser( async function(_id, done) {
await User.findById(_id).then((user, err)=>{
done(err, user)
})
})
passport.use('local.register' , new localStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
} , async (req , email , password , done) => {
console.log(email , password)
await User.findOne({ 'email' : email }).then((err , user) => {
try {
if(err || user) return done(null , false , req.flash('errors' , 'حساب کاربری با این ایمیل قبلاً ایجاد شده است!'))
const newUser = new User({
name : req.body.name,
email,
mobile : req.body.mobile,
password
})
newUser.save().then(() => done(null , newUser))
} catch (err) {
if(err) return done(err , false , req.flash('errors' , 'متاسفانه در فرایند ثبت نام خطایی رخ داده، لطفاً دوباره تلاش کنید!'))
}
})
}))
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟