Esta ruta de publicación a continuación se agota aproximadamente 1/100 veces. Estoy tratando de optimizar el código para evitar estos tiempos de espera, pero continúan ocurriendo. ¿Hay algo que pueda hacer para evitar estos tiempos de espera de solicitud?
No estoy seguro de cómo solucionar este problema. Esta ruta no debería tardar más de 30 segundos en publicarse.
¡Gracias por cualquier ayuda!
router.post("/updateAccount", usernameToLowerCase, async function(req, res){ if (req.user) { await User.findOne({username: req.body.currentUser}, function(err, user) { console.log('first ' + user) if (err) { console.log('cant find user err' + err) return done(err); } user.username = req.body.username; user.password = req.body.password; user.accountUpdated = true; user.save(function(err){ if (err) { req.flash("error", "It looks like that email address is taken. Please use a different email address"); res.redirect('back'); } else { req.logout(); req.login(user, function(err) { if (err) console.log('There was an account error' + err) req.flash("success", "Your account has been created! Your username is " + user.username ); res.redirect('/results') }); } }); }); } });puede usar findOneAndUpdate que encuentra un documento coincidente, lo actualiza de acuerdo con el argumento de actualización
try{ let filter = {username: req.body.currentUser}; let user = { username = req.body.username; password = req.body.password; accountUpdated = true } let user = await User.findOneAndUpdate(filter, user,{ select: "_id username", new: true, }); req.logout(); req.login(user, function(err) { if (err) console.log('There was an account error' + err) req.flash("success", "Your account has been created! Your username is " + user.username ); res.redirect('/results') }); } catch(error){ console.log(error) req.flash("error", "It looks like that email address is taken. Please use a different email address"); res.redirect('back'); //handle error }Creo que, dado que obtiene 1 de cada 100 solicitudes de tiempo de espera, se trata más de un problema de devolución de llamada, ya que el evento asíncrono está en cola y no se produce ningún error.
También creo que req.logout(), que es una solicitud asíncrona, debe manejarse antes de req.login().
Verifique estos puntos antes de calcularlo como un problema de consulta.
Intente agregar más índices a su modelo de usuario y use más de un campo para encontrar lo que ayudará a aumentar la velocidad de la operación.
agregar un índice único en el nombre de usuario archivado ayudará
también puede usar Model.updateOne() para actualizar el documento sin cargarlo desde la base de datos para que el documento no esté en la memoria de proceso de Node.js
si eso no ayuda, puede aumentar el tiempo de espera para el servidor a cualquier número que desee
var server = app.listen() server.timeout = 2000pero en tu caso estás hablando de 30 seg. que es mucho tratar de usar
try{}catch(){}y ver si algún error no se maneja correctamente