2017-02-27 88 views
1

我基本上試圖用MEAN創建一個註冊頁面,我想檢查數據庫(使用Mongoose的Mongo),如果用戶和電子郵件已經存在,if其中一個是真的,發送res.json失敗。MEAN Stack應用程序 - 發送後無法設置標題

如果用戶名和電子郵件尚未在數據庫中,請繼續添加該用戶。

我收到一條錯誤消息「發送後無法設置標題」。在節點控制檯上,我試圖找出原因。

一旦User.getUsername()在回調中返回一個用戶(如果用戶名傳遞存在於數據庫中),它不應該返回json並在那裏結束請求嗎?爲什麼它繼續User.adduser()函數並嘗試在那裏設置標題?

任何幫助表示讚賞,謝謝。

router.post('/register', (req, res, next) =>{ 
    let newUser = new User({ // Collect body info 
     name: req.body.name, 
     email: req.body.email, 
     username: req.body.username, 
     password: req.body.password 
    }); 

    // Check if username is available 
    User.getUserByUsername(newUser.username, (err, user) => { 
     if(err) throw err; 
     if(user){ 
      return res.json({success: false, msg: 'User already exists'}); 
      // I want to end here if there's a user 
     } 
    }); 

    //Continue to add user if getUserByUsername() returns false for user 

    // Add user 
    User.addUser(newUser, (err, user) => { // Add user 
     if(err){ 
      return res.json({success: false, msg: 'Failed to register'}); 
     } else { 
      return res.json({success: true, msg: 'You have been successfully registered!'}); 
     } 
    }); 

}); 

回答

1

由於異步方法的工作原理,您擁有的邏輯無法按預期工作。目前的邏輯是做User.getUserByUsername然後做User.addUser,如果任一方法回調,處理它。我很確定你想要,做User.getUserByUsername,等待它的回調,如果有必要請致電User.addUser。這是一個粗略的實現,你可以使用promise或者定義邏輯外的方法來清理它。另外,確保你在代碼中的某個時刻調用res.end()。

router.post('/register', (req, res, next) =>{ 
    let newUser = new User({ // Collect body info 
     name: req.body.name, 
     email: req.body.email, 
     username: req.body.username, 
     password: req.body.password 
    }); 

    // Check if username is available 
    User.getUserByUsername(newUser.username, (err, user) => { 
     if(err) throw err; 
     if(user){ 
      return res.json({success: false, msg: 'User already exists'}); 
      // I want to end here if there's a user 
     }else{ 
      //Continue to add user if getUserByUsername() returns false for user 

      // Add user 
      User.addUser(newUser, (err, user) => { // Add user 
       if(err){ 
        return res.json({success: false, msg: 'Failed to register'}); 
       } else { 
        return res.json({success: true, msg: 'You have been successfully registered!'}); 
       } 
      }); 
     } 
    }); 
}); 
+0

非常感謝!是的,這是我想如何實現它。但是,我認爲一旦我添加checKIfEmailExists()方法也會非常麻煩。我現在有它的工作,它檢查用戶名的唯一性,在回調中,它檢查電子郵件和檢查電子郵件回調中,如果用戶名和電子郵件都很好,它會添加用戶。它的工作原理非常混亂,不可讀 – Berimbolo

相關問題