You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:25:23