提问者:小点点

无法设置属性“username”为null


有一个错误,其中登录的用户将尝试更新他们的帐户用户名,但遇到一个错误。在我的一生中,我无法弄清楚为什么有时(可能有1/20的用户遇到这种情况)找不到当前的用户。只有登录后,用户才能访问此页面。错误有:

投掷;//未处理的“错误”事件

TypeError:无法设置null的属性“username”

错误似乎发生在这里:user.username=req.body.username;

router.post("/updateAccount", function (req, res) {
    if (req.user) {
        User.findOne({username: req.body.currentUser}, function (err, user) {
            if (err) {
                return done(err);
            }
            user.username = req.body.username;
            user.save(function (err) {
                if (err) {
                    req.flash("error", "It looks like that email address is taken.");
                    res.redirect('back')
                } else {
                    req.logout();
                    req.login(user, function (err) {
                        if (err) console.log('There was an account error' + err)
                        req.flash("success", "Your account has been created! Your username is " + user.username);
                        res.redirect('/results')

                    });
                }
            });
        });

    } else {
        res.redirect('/results')
    }

});

共1个答案

匿名用户

如果user.findone({username:req.body.currentuser}查询(如文档中所述)找不到匹配的用户,user将为空。

因此,如果是这种情况,您应该添加另一个检查,并适当地处理:

User.findOne({username: req.body.currentUser}, function (err, user) {
            if (err) {
                return done(err);
            }
            if (!user) {
                // handle this case as user.username = req.body.username will fail
            }
            // ... rest of the code