Estoy usando Ajax y Node JS para permitir que un usuario se registre en una aplicación de una página. Cuando el usuario presiona registrarse, lo configuro para verificar si se toma el nombre de usuario. Todo esto funciona hasta ahora. Ahora, sin embargo, necesito alertar al usuario de que se ha tomado su nombre de usuario. ¿Cómo imprimiría el error o mostraría el error al usuario de esta manera? El problema es que estoy evitando las actualizaciones de página.
app.post("/quiz", function(req, res, next){ User.findOne({username: req.body.username}, function(err, user){ if(err) { console.log(err)} if(user) { console.log(user) // I NEED TO SEND THE ERROR HERE SAYING THE USERNAME IS TAKEN // I NEED TO SEND THE ERROR HERE SAYING THE USERNAME IS TAKEN // I NEED TO SEND THE ERROR HERE SAYING THE USERNAME IS TAKEN } }); //continue with your registration logic var newUser = new User({username: req.body.username, datapoint: req.body.datapoint}); User.register(newUser, req.body.password, function(err, user){ // if(res.error){ if(err){ req.flash("error", err.message); res.redirect('back') return res.render("quiz"); } else { passport.authenticate("local")(req, res, function(){ // req.flash("success", "Welcome to JobQuiz " + user.username); res.redirect("jobquiz"); console.log(req.body.datapoint) }); } }); });Configuración del Ajax
$(function() { $("#checkpaymentForm").on("submit", function(e) { e.preventDefault(); $.ajax({ url: $(this).attr("action"), type: 'POST', data: $(this).serialize(), dataType:'json', }) }); });Primero envíe su respuesta en la declaración if en el código del servidor:
app.post("/quiz", function(req, res, next){ User.findOne({username: req.body.username}, function(err, user){ if(err) { console.log(err)} if(user) { res.json({"message": "false" }); } });Luego, en su interfaz, agregue la función de éxito para manejar la respuesta:
$(function() { $("#checkpaymentForm").on("submit", function(e) { e.preventDefault(); $.ajax({ url: $(this).attr("action"), type: 'POST', data: $(this).serialize(), dataType: 'json', success: function (data) { if (data.message === "false") { //TODO: alert users here } }) }); });