Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

108
Visualizações
nodejs api función de solicitud manejo de errores aplicación de bloqueos

Estoy tratando de hacer una llamada a la API y pasarla a una función que la almacene en mongodb. El problema es que todo el sitio falla cuando trato de manejar los errores en lugar de redirigir a la página de error. Todas mis otras funciones funcionan, es solo la función de solicitud que contiene la llamada API que no funciona.

En lugar de redirigir, solo recibo los mensajes de error en la terminal.

Aquí está mi código para ello:

índice.js

 router.post('/',async function(req,res){ var {title,date,loc,count, save,del,update,csv} = req.body; var {username} = req.session; console.log(req.body); var url = `http://api.openweathermap.org/data/2.5/weather?q=${loc}&appid=${API_KEY}&units=metric` if(save){ //weather api request({ url: url, json: true }, async function (error, response) { if(error){ throw new Error ('type error'); } else{ console.log('Current weather: ' + response.body.main.temp + ' degrees celsius' ); let w = JSON.stringify(response.body.main.temp); console.log(w) await db.addItem(username,title, loc, count, w, date); } }); res.redirect('/'); }

aplicación.js

 app.use('/', indexRouter); // catch 404 and forward to error handler app.use(function(req, res, next) { next(createError(404)); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); });

Así es como se ve mi terminal cuando la aplicación falla: mensaje de error del terminal

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

No ha descrito qué hacer si se produce un error en la instrucción else de la llamada de request . Entonces, si ocurre un error, se bloqueará.

Dado que está utilizando async...await en la devolución de llamada para insertar en la base de datos, puede obtener la funcionalidad que desea envolviéndola en un bloque try...catch y moviendo la redirección a catch:

 request({ url: url, json: true }, async function (error, response) { if(error){ throw new Error ('type error'); } else { try { console.log('Current weather: ' + response.body.main.temp + ' degrees celsius' ); let w = JSON.stringify(response.body.main.temp); console.log(w) await db.addItem(username,title, loc, count, w, date); } catch (error) { console.log(error); res.redirect('/'); } } });

Sin embargo, el throw new Error('type error') aún hará que la aplicación se bloquee aquí. Si también desea redirigir en este caso, entonces puede agregar un res.redirect('/') allí también en lugar de lanzar, o envolver toda la llamada de request en un try...catch para que el bloque de captura también atrapa ese error de tipo lanzado:

 try { request({ url: url, json: true }, async function (error, response) { if(error){ throw new Error ('type error'); } else{ console.log('Current weather: ' + response.body.main.temp + ' degrees celsius' ); let w = JSON.stringify(response.body.main.temp); console.log(w) await db.addItem(username,title, loc, count, w, date); } }); } catch (error) { res.redirect('/') }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda