Что я делаю не так с моей функцией обновления на 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 }
});

var db = mongoose.createConnection(app.get('MONGODB_CONN')),
    User = db.model('users', UserSchema);

Моя функция для обновления:

app.post('/user/updateScores',function(req, res){
try{
      var query = req.body.username;
      User.findOneAndUpdate(query, { win : req.body.win, lose : req.body.lose, draw : req.body.draw }, function (err,user){
           if (err) res.json(err) ;
             req.session.loggedIn = true;
             res.redirect('/user/' + user.username);
      });
    }
    catch(e){
        console.log(e)
    }
  });

Проблема в том, что когда я пытаюсь обновить, он обновляет текущие данные, но идет на пустую страницу и выдает исключение:

ReferenceError: win is not defined
    at eval (eval at <anonymous> (C:\Users\ryan-utb\Desktop\RockScissorsPaper\node_modules\underscore\underscore.js:1176:16), <anonymous>:5:9)
    at template (C:\Users\ryan-utb\Desktop\RockScissorsPaper\node_modules\underscore\underscore.js:1184:21)
    at Function.exports.underscore.render (C:\Users\ryan-utb\Desktop\RockScissorsPaper\node_modules\consolidate\lib\consolidate.js:410:14)
    at C:\Users\ryan-utb\Desktop\RockScissorsPaper\node_modules\consolidate\lib\consolidate.js:106:23
    at C:\Users\ryan-utb\Desktop\RockScissorsPaper\node_modules\consolidate\lib\consolidate.js:90:5
    at fs.js:266:14
    at Object.oncomplete (fs.js:107:15)

но я уже правильно определил победу, что, похоже, проблема?

Теги:
mongoose

2 ответа

0
  User.update({
    username: req.body.username
  },{
    $set: {
        win : req.body.name,
        loose : req.body.loose
    }
  }, function(err, result) {
     if (err) {
       console.log(err);
   } else if (result === 0) {
      console.log("user is not updated");
   } else {
      console.log("user is updated");
   }
 });

Надеюсь, вы поймете свою проблему и сможете обновить свою коллекцию пользователей.

0
User.update(
    {username:req.body.username},
    { win : req.body.win, lose : req.body.lose, draw : req.body.draw },
    function (err, data) { //look - no argument name "user" - just "data"
    //2 mistakes here that you should learn to never do
    //1. Don't ignore the 'err' argument
    //2. Don't assume the query returns something. Check that data is not null.
    console.log(data);
    //The next line must be INSIDE this function in order to access "data"
    res.redirect('/user/' + data.username);
});     
//ACK don't try to access "data" (or "user") here. this is asynchronous code!
//this code executes EARLIER IN TIME than the User.update callback code

обновление после вашего фрагмента v2

  • ваш вызов на find просто не соответствует каким-либо документам, поэтому user имеет значение null
  • FYI Вы можете выполнять поиск и обновление одновременно с помощью одной операции findOneAndUpdate
  • 0
    Привет Питер! Я обновил свой код, чтобы сделать все комментарии, которые вы разместили. Проверьте это, и у меня есть новая ошибка, которая вышла
  • 0
    Можно ли спросить, как это сделать? «Вы можете одновременно выполнять поиск и обновление с помощью одной операции findOneAndUpdate». В настоящий момент я очень растерялся
Показать ещё 5 комментариев

Ещё вопросы

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