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

使用passport-local-mongoose时User.register回调函数未执行问题

问题原因及修复方案

你的代码存在语法错误,导致回调函数根本没有被传入User.register方法中,所以回调里的代码不会执行。

错误点分析

你在调用User.register时,提前闭合了方法的括号:

User.register({ username: req.body.username }, req.body.password), function (err, user) { ... }

这里的)直接结束了User.register的调用,后面的function(err, user){...}变成了一个独立的、未被调用的函数表达式,完全和register方法无关。这就解释了为什么用户能被存入数据库(register确实执行了),但回调里的console.log和后续逻辑都没触发。

修正后的代码

把回调函数作为第三个参数传入User.register,确保括号在回调函数之后闭合:

app.post("/register", async (req, res) => {
    console.log("req body username is : " + req.body.username);
    console.log("req body password is : " + req.body.password);

    // 修正括号位置,将回调作为第三个参数传入
    User.register({ username: req.body.username }, req.body.password, function (err, user) {
        console.log("This string is supposed to be displayed.");
        
        if (err) {
            console.log("Error in User registration", err);
        } else {
            passport.authenticate("local")(req, res, function () {
                res.send("you are registered.")
                console.log("passport authenticate works.");
            })
        }
    });
});

额外说明

因为passport-local-mongoose的register方法支持Promise语法,你也可以用async/await来替代回调写法,避免这类语法错误:

app.post("/register", async (req, res) => {
    console.log("req body username is : " + req.body.username);
    console.log("req body password is : " + req.body.password);

    try {
        const user = await User.register({ username: req.body.username }, req.body.password);
        console.log("This string is supposed to be displayed.");
        passport.authenticate("local")(req, res, function () {
            res.send("you are registered.")
            console.log("passport authenticate works.");
        });
    } catch (err) {
        console.log("Error in User registration", err);
    }
});

内容的提问来源于stack exchange,提问作者koji tanaka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:25:25