如何在nodejs/mongodb上创建一个更新函数

How to create an update function on nodejs/mongodb?

本文关键字:一个 函数 更新 创建 nodejs mongodb      更新时间:2023-09-26

嗨,我目前是nodejs和mongodb的新手,我想做的是创建一个函数来更新我的用户模式中的赢,输,抽记录。

我的架构:

UserSchema = new mongoose.Schema({
    username:'string',
    password:'string',
    email:'string',
    //Change Made
    win:{ type: Number, default: 0 },
    lose:{ type: Number, default: 0 },
    draw:{ type: Number, default: 0 }
});

我的更新功能:

//Update scores
app.post("/user/updateScores", function (req, res) {
    var user = new User({
        username:req.body.username,
        win:req.body.win,
        lose:req.body.lose,
        draw:req.body.draw  
    });
    Users.findOne({ username : req.params.username }, function(error, user) {
    if (error || !user) {
      res.send({ error: error });
    } else {
       user.update(function (err, user) {
       if (err) res.json(err)
        req.session.loggedIn = true;
        res.redirect('/user/' + user.username);
        });
    }
    });
});

问题是当我尝试更新时,当我尝试通过我的 html 文件更新时。它不会更新任何内容,只是保持不变(值赢,输,抽奖,默认值为0,因此当我注销并再次登录时,赢,输,平记录的值仍然为零)。我彻底检查了问题是否是我制作的 html 和 javascript 函数,但事实并非如此,所以我认为问题是我制作的更新函数。你们中有谁知道我哪里出错了?谢谢!

假设从客户端正确调用了post,则需要注意变量和参数名称,因为现在的范围是保存刚刚通过findOne获取的用户对象的精确副本。

您已将用户声明为post回调的变量,然后在findOne中再次声明。内部变量user将优先。

app.post("/user/updateScores", function (req, res) {
    var username = req.body.username;
    Users.findOne({ username : username }, function(error, user) {
        if (error || !user) {
          res.send({ error: error });          
        } else {
           // update the user object found using findOne
           user.win = req.body.win;
           user.lose = req.body.lose;
           user.draw = req.body.draw;
           // now update it in MongoDB
           user.update(function (err, user) {
               if (err) res.json(err) {
                   req.session.loggedIn = true;
               }
               res.redirect('/user/' + user.username);
           });
        }
    });
});