Как создать функцию обновления на nodejs / mongodb?

0

Привет Я в настоящее время новичок в 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, которые я сделал, но это не так, поэтому я думаю, что проблема в том, что я обновил эту функцию. У любого из вас есть идея, где я пошла не так? Благодарю!

Теги:
mongoose

1 ответ

0
Лучший ответ

Предполагая, что ваше 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);
           });
        }
    });
});
  • 0
    это еще одна проблема. Я не могу правильно вызвать эту функцию из моего html-файла: код, который я использую в моем home.js, имеет вид <form action = "/ user / updateScores" method = "POST" class = "form-horizontal"> <input type = "text "id =" new_user "name =" user "value =" <% = user.username%> "> <input type =" hidden "id =" new_win "name =" win "value =" "> <input type = "hidden" id = "new_lose" name = "lost" value = ""> <input type = "hidden" id = "new_draw" name = "draw" value = ""> <input type = "button" name = " btn "onclick =" save () "value =" Сохранить результаты "/> </ form>
  • 0
    и не вызывает функцию / user / updateScores.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню