2013-09-22 30 views
0

您好我目前是nodejs和mongodb的新手,我想做的是創建一個函數來更新我的勝利,失去,從我的userschema中繪製記錄。如何在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函數,但事實並非如此,所以我認爲問題在於我所做的更新函數。你們中的任何人都知道我錯了哪裏?謝謝!

回答

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使用代碼是\t \t <形式行動=「/用戶/ updateScores」方法=「POST」類=「形橫」> \t \t \t 」> \t \t \t \t \t \t \t \t \t \t \t \t \t \t – cor03rock

+0

並且不調用/ user/updatescores函數。 – cor03rock

+0

對不起,但要解決一個評論中的新問題真的不是StackOverflow上的禮儀。看起來你可能沒有提交表單數據?你有一個按鈕,但它不是提交按鈕。 – WiredPrairie