2017-01-10 6 views
0

То, что я пытаюсь сделать, это использовать ajax для отправки запроса на отправку на сервер и убедиться, что почтовый запрос не обновляет страницу (используя e.preventDefault). На сервере я хочу проверить, принято ли имя пользователя или адрес электронной почты, а если оно не было принято, то автоматически войдите в систему и обновите страницу. Проблема в том, что когда я вызываю req.login и отправляю данные, которые будут регистрироваться в нем, похоже, что они не работают, но страница все еще обновляется. Есть идеи?req.login не регистрирует пользователя

app.post('/signup', function (req, res) { 
var userDetails = User({ 
    username: req.body.username, 
    email: req.body.email, 
    password: bcrypt.hashSync(req.body.password1, bcrypt.genSaltSync(10)) 
}); 

User.findOne({ 
    $or: [{ 
     'username': req.body.username 
    }, { 
      'email': req.body.email 
     }] 
}, function (err, user) { 
    if (user) { 
     if (allClients.indexOf(req.body.socket)) { 
      if (user.username === req.body.username) { 
       io.to(req.body.socket).emit('userInfo', 'That username is already in use.'); 
      } else { 
      } 
      if (user.email === req.body.email) { 
       io.to(req.body.socket).emit('userInfo', 'That email is already in use.'); 
      } else { 
      } 
     } else { 
      console.log('timeout error 822') 
     } 
    } else { 
     req.login(userDetails, function (err) { 
      if (!err) { 
       userDetails.save(function (err) { 
        if (err) throw err; 
        res.redirect('/'); 
       }); 
      } else { 
       console.log(err) 
      } 
     }) 
    } 
    if (err) { 
     return done(err); 
    } 
}); 
}); 

Здесь я делаю запрос на отправку ajax. Как вы можете видеть, я препятствую отправке формы для обновления страницы, но если форма будет успешной, она будет отправлена.

$("#form1").submit(function(e) { 
     e.preventDefault(); 
     $.ajax({ 
      type: "POST", 
      url: '/signup', 
      data: $(this).serialize(), 
      success: function(data) 
      { 
       window.location.reload(true); 
      } 
     }); 
}); 

ответ

0

Я считаю, что ваши сообщения «уже приняты» считаются успешными вашим API. Вы можете либо выбросить ошибку в этих случаях, либо catch с $.ajax или установить другой ответ и прочитать data на success.

+0

Все работает нормально, когда я удаляю e.preventDefault из вызова ajax. Есть ли способ, который я могу сказать, что ajax-запрос с сервера остановит функцию e.preventDefault и продолжит перенаправление ('/') после сохранения данных в хранилище mongo? –

+0

Я не думаю, что это был бы лучший подход. Добавьте '.error()' (или '.fail()' в зависимости от того, какую версию jQ вы используете), чтобы проверить, что вы получаете. Или консольный журнал 'data' на' success' ... – AlvMF1

+0

Как я могу сделать ошибку для запроса ajax в этом сценарии, когда я выдаю клиенту? –

Смежные вопросы