使用Passport注册时遇TypeError: cb is not a function错误怎么解决?
问题
使用Passport实现用户注册功能时,页面弹出TypeError: cb is not a function错误,控制台报错日志如下:
node_modules\passport-local-mongoose\index.js:247 promise.then((result) => cb(null, result)).catch((err) => cb(err)); ^ TypeError: cb is not a function
对应注册代码:
router.post( "/register", catchAsync(async (req, res, next) => { const { username, password, email, number, address } = req.body.user; const user = new User({ email, username, number, address, isVerified: false, }); const registredUser = await User.register(user, username, password); req.login(registredUser, (err) => { if (err) { return next(err); } console.log(registredUser); req.flash("success", "Dobro došli na About Women!"); res.redirect("users/confirm"); }); }) );
修复方法
错误根源是User.register()的参数传递不符合passport-local-mongoose的要求。该方法的正确参数格式为User.register(userInstance, password, [callback]),你多传入了一个username参数,导致方法误将password识别为回调函数,从而触发cb is not a function错误。
修改后的代码:
router.post( "/register", catchAsync(async (req, res, next) => { const { username, password, email, number, address } = req.body.user; const user = new User({ email, username, number, address, isVerified: false, }); // 移除多余的username参数 const registredUser = await User.register(user, password); req.login(registredUser, (err) => { if (err) { return next(err); } console.log(registredUser); req.flash("success", "Dobro došli na About Women!"); res.redirect("users/confirm"); }); }) );
说明:创建User实例时已经传入了username,register方法会直接从该实例中读取用户名信息,无需额外传递。
内容的提问来源于stack exchange,提问作者Impra
相关产品推荐
相关产品推荐

