Tengo una configuración de función para verificar básicamente si alguien ha iniciado sesión y si está agregando 1 a una variable. El problema es que cuando se ejecuta en una aplicación como un cartero, dura para siempre, y cuando se ejecuta en el navegador, nunca va a .then.
html
$('.fa-regular.fa-heart').click(function(){ $regular.toggleClass('hide'); $solid.toggleClass('hide'); $added.toggleClass('hide'); $noadded.toggleClass('hide'); console.log("running"); fetch("/articles/popplus/<%= article.id%>", { method: 'POST', mode: 'cors', cache: 'default', body: JSON.stringify(null) }).then((data) => { console.log("data") console.log(data) }); })Nodo.js
router.post('/popplus/:id', async (req, res, next) => { var id = req.params.id; const user = await Users.findOne({ username: req.session.username }) console.log(user) if (user){ console.log(user.likedposts) if (!user.likedposts.includes(id)){ console.log("here") req.article = await Article.findById(id) req.article.pop += 1 let article = req.article user.likedposts.push(id) await user.save() await article.save() return "done" } else{ console.log("already liked this post") return "already liked this post"; } } else{ console.log("sighn in"); return {test: "must sighn in to like posts"}; } })Para completar un controlador de solicitud Express, DEBE enviar algún tipo de respuesta http. La forma habitual de hacerlo es con res.send(...) o res.json(...) , pero si no tiene datos para enviar, también puede simplemente hacer res.sendStatus(xxx) o incluso simplemente res.end() .
Express no presta atención a lo que return desde su controlador de solicitudes, por lo que devolver un valor desde el controlador de solicitudes no hace nada en absoluto: se ignora por completo. En su lugar, debe llamar explícitamente a uno de los métodos anteriores para enviar una respuesta http.
Si no envía una respuesta http llamando a uno de estos métodos de tipo Express en el objeto de respuesta, entonces el cliente simplemente se sienta allí esperando una respuesta para volver a su solicitud y espera un tiempo hasta que finalmente se agota el tiempo de espera de la solicitud. .
Use res.send() en lugar de return porque return no se usa para los controladores de eventos.