¡Solo estoy aprendiendo nodejs pero este error me mata por dentro! Mi sitio web sigue solicitando dos veces cada método de publicación que tenemos. Al principio, pensé que era mi error en relación con mongodb, pero estaba equivocado, esto sucede con todos los métodos POST que tengo en mi sitio web (excepto la función de inicio de sesión).

Ejemplo: Mi función de comentario
Lado del cliente
$('.commentSubmit').click(e => { e.preventDefault() let commentContent = $('#Comment').val() let postId = $('#input-comment').val() $.ajax({ url: '/dashboard/postComment', type: 'POST', data: { postId: postId, comment: commentContent } }) .done(data => { let htmlcomment = ` <li class="list-group-item mt-3" id="${data._id}"> <h6 class="card-title" >${data.Owner} <p class="card-text"><small class="text-muted">${data.createAt} </small></p> </h6> <h6 class="card-subtitle mb-2 text-muted"></h6> <p class="card-text" >${data.content} </p> <div class="card-footer text-muted" style="text-align: right;"> <button type="button" id="commentdelete" data-id="${data._id}" class="btn btn-danger btn-sm commentdelete">Delete</button> </div> </li>` $(`ul#${postId}ulul`).prepend(htmlcomment) document.getElementById('Comment').value = '' }) })Servidor
router.post('/postComment', (req, res) => { console.log('done') req.connection.setTimeout( 1000 * 60 * 10 ) if(req.session._id) { if(!req.body.comment || !req.body.postId) { return res.render('dashboard',{errors: 'Input comment first', user: u, posts: post, comments: comment, notifs: notif}) } let comment = req.body.comment let postId = req.body.postId User.findOne({_id: req.session._id}) .then(u => { user = u }) console.log(req.url) Posts.findOne({_id: postId}) .then(p => { if(!p) res.send('PostID NOT Valid') let comment = new Comments({ content: req.body.comment, Owner: user.name, PostId: postId }) comment.save(); return res.json(comment) }) } else { return res.redirect('/login') }})
Creo que tiene un formulario en su lado del cliente y un botón con la clase .commentSubmit.
atrapa el evento de clic e intenta evitar el comportamiento predeterminado. cambie el tipo de botón de envío de enviar a botón:
<button type="button">save</button>por lo tanto, el botón no enviará su formulario, pero el código js hará la publicación de ajax por usted. el predeterminado de prevención funcionará en el evento form.sumbit si captura el evento form.onsubmit.