2014-03-31 67 views
2

我正在學習一本書的Node.js。我沒有像現在那樣應對和使用圖書樣本代碼,而是在自己的代碼中使用基礎和重用,作爲學習練習。問題與貓鼬model.save回調

我有這個代碼爲一個新的用戶創建,我會複製我認爲是相關的。 我希望發生的是,user.register使用model.register,並獲得真或假,如果用戶創建或根據不和發送響應accordly

app.js捕捉後

app.post('/user', users.actions.register); 

user.js的寄存器

var register = function (req, res) { 
    if (req.body.username === '' || 
     req.body.email === '' || 
     req.body.password === '') { 

     //Some field is blank - insufficient information 
     console.log('User creation failure: Insufficient data'); 
     res.json(400); 

    } else { 

     var newUser = new models.account.user ({ 
      username: req.body.username, 
      email: req.body.email, 
      password: req.body.password 
     }); 

     models.account.register (newUser, function (succ) { 
      console.log (succ); 
      if (succ === true) { 
       res.json(200); 
      } else { 
       res.json(400); 
      } 
     }); 
    } 
}; 

然後account.register

var register = function (newUser) { 
    console.log ('Save command sent.'); 
    newUser.save (function (err) { 
     if (err) { 
      console.log(err); 
      return false; 
     } 
     console.log('User Created'); 
     return true; 
    }); 
}; 

用戶獲取對數據庫的創建,並在控制檯上輸出

Save command sent. 
User Created 

我期待發生的是,SUCC接收真的還是假的,但我做錯了什麼,並不能找出原因。

我讓這段代碼改變了方法,但是因爲這是一個對我的學習實驗,所以我希望能夠這樣做。

如果有人能指出我正確的方向或告訴我我做錯了什麼,我將不勝感激。 謝謝。

回答

2
models.account.register (newUser, function (succ) { 
    ... 
} 

您傳遞一個匿名函數作爲register的第二個參數。因此,register必須接受並調用它的結果,像這樣

var register = function (newUser, callBackFunction) { // accept the callback 
    console.log ('Save command sent.'); 
    newUser.save (function (err) { 
     if (err) { 
      console.log(err); 
      return callBackFunction(false); // invoke it on failure :(
     } 
     console.log('User Created'); 
     return callBackFunction(true);  // invoke it on Success :) 
    }); 
}; 
+0

非常感謝。它正在像我期待的那樣工作。所以我從中得到的是,我使用的是未聲明的回調函數,而且我沒有以正確的方式返回。也許我會需要更多的閱讀,雖然我可以看到我不完全理解它的錯誤。再次感謝您的快速回答。 – Gabriel