【问题标题】:Cannot set property 'username' of null无法将属性“用户名”设置为 null
【发布时间】:2020-08-16 00:32:10
【问题描述】:

出现错误,已登录的用户将尝试更新其帐户用户名但遇到错误。对于我的生活,我无法弄清楚为什么有时(也许 1/20 的用户会遇到这种情况)无法找到当前用户。用户只有登录后才能访问此页面。错误是:

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

TypeError:无法将属性“用户名”设置为 null

错误似乎发生在这里: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')
    }

});

【问题讨论】:

    标签: node.js mongodb express error-handling passport.js


    【解决方案1】:

    如果User.findOne({username: req.body.currentUser} 查询(如docs 中提到的)找不到匹配的用户,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
    

    【讨论】:

    • 非常感谢@elo!这很有帮助。知道为什么当前登录的用户会发生这种情况吗?也许用户会话丢失了?
    • 如果会话丢失req.user 我认为是未定义的。据我所知,用户为空实际上是可以的,因为这意味着不存在具有在请求正文中传递的所需用户名的用户。还是我误会了?
    • 那就对了。让我失望的是用户在尝试更新用户名时当前已登录。这意味着据我所知,没有理由不应该找到用户。嗯
    • 实际上它不是在数据库中查询登录用户,而是在数据库中查询请求正文中传递的用户名。我不知道您的前端/客户端代码,但req.body.currentUser 可以包含任意值,即尚不存在的用户名。
    • 啊!这可能就是问题所在。我没有意识到这一点。非常感谢!
    猜你喜欢
    • 2014-08-25
    • 2013-04-21
    • 2013-08-16
    • 2017-05-05
    • 2021-10-02
    • 2021-05-23
    • 2019-10-24
    • 2017-04-26
    • 2020-02-19
    相关资源
    最近更新 更多