2017-06-21 178 views
0

我正在使用NodeJS和護照讓用戶創建一個帳戶,然後才能看到他們剛剛參加的測驗的結果。我的挑戰是我需要確認用戶名在頁面刷新前可用,因爲如果發生這種情況,用戶將失去結果。Node.js - 檢查用戶是否存在

再次:我需要驗證用戶名不刷新之前。

我想我很近,但它不工作。我將如何更改我的代碼以應對這一挑戰?

當前如果使用用戶名,它會在嘗試創建一個帳戶時返回一個錯誤,並且用戶在/ failpage上結束,如下所示。

app.post('/quiz', usernameToLowerCase, emailToLowerCase, function(req, res) { 


    User.findOne({ 
     username: req.body.username 
    }, function(err, user) { 
     if (err) { 
      alert(err) 
      if (user) { 
       alert('this username is already taken. Please choose another.') 
       console.log('there was a user'); 
       return false; 

      } 
     } 
    }); 

    var user = new User({ 
     username: req.body.username, 
     email: req.body.email, 
     password: req.body.password, 
    }) 



    user.save(function(err) { 
     console.log('this is the problem' + ' ' + err) 
     if (err) { 
      return res.redirect('/failpage') 
     } 


     req.logIn(user, function(err) { 
      if (err) { 
       console.log(err); 
      } 
      console.log('all looks good') 
      res.redirect('/results'); 
     }); 
    }); 
}); 
+0

您需要在回調 – SLaks

+0

運行謝謝@SLaks。在user.save回調? – AndrewLeonardi

+0

請格式化您的代碼以使其可讀。如果您能夠輕鬆閱讀/理解您的代碼,您就更有可能獲得幫助。 – jfriend00

回答

0

與此解決它,如果任何人試圖做同樣的事情:

在app.js

app.get('/usercheck', function(req, res) { 
    User.findOne({username: req.query.username}, function(err, user){ 
     if(err) { 
      console.log(err); 
     } 
     var message; 
     if(user) { 
      console.log(user) 
      message = "user exists"; 
      console.log(message) 
     } else { 
      message= "user doesn't exist"; 
      console.log(message) 
     } 
     res.json({message: message}); 
    }); 
}); 

在JS

$('#usercheck').on('change', function() { 
    $.get('/usercheck?username='+$('#usernameValue').val().toLowerCase(), function(response) { 
    $('#usernameResponseHidden').text(response.message) 
    if ($('#usernameResponseHidden').html() === "user exists"){ 
     $('#usernameResponse').text('That username is taken. Please pick another') 
    } 
1

爲了解決你的問題,我認爲你需要路線。至少一個app.get('/quiz')如果用戶存在或不存在,它將返回布爾值。可以在該路由中發送User.findOne部分。只需要在表單的用戶名字段焦點丟失時使用ajax發出請求,並在名稱可用時顯示通知。

+0

謝謝你的幫助!你有什麼可能讓我成爲一個例子嗎?另外我該如何擊中獲取路線?我做表格嗎? – AndrewLeonardi