То, что я пытаюсь сделать, это использовать 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);
}
});
});
Все работает нормально, когда я удаляю e.preventDefault из вызова ajax. Есть ли способ, который я могу сказать, что ajax-запрос с сервера остановит функцию e.preventDefault и продолжит перенаправление ('/') после сохранения данных в хранилище mongo? –
Я не думаю, что это был бы лучший подход. Добавьте '.error()' (или '.fail()' в зависимости от того, какую версию jQ вы используете), чтобы проверить, что вы получаете. Или консольный журнал 'data' на' success' ... – AlvMF1
Как я могу сделать ошибку для запроса ajax в этом сценарии, когда я выдаю клиенту? –