//mongoose connection function const connectDB = (url) => { return mongoose.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('Connected to database')) .catch(err=>console.log(`DB CONNECTION ERR ${err}`)) } const port = process.env.PORT || 5000 const mongoURI = process.env.MONGO_URI //start const start = async () => { try { await connectDB(mongoURI) app.listen(port, () => console.log(`Server running at ${port}`)) } catch (error) { console.log(error); } } start()Esta es la configuración básica de mi servidor. Intenté jugar con la configuración de la conexión mongoose y app.listen() también, pero el bloque catch (en try-catch) no manejó nada. ¿El bloque catch solo maneja los errores que arrojamos?
try / catch no maneja nada porque evita que vea errores con este código en connectDB :
.catch(err=>console.log(`DB CONNECTION ERR ${err}`)) Eso convierte el rechazo en cumplimiento con el valor undefined (el valor de retorno de console.log ).
Así como debe evitar detectar excepciones demasiado pronto, debe evitar manejar los rechazos demasiado pronto. Eso es más fácil (en mi humilde opinión) si usa constantemente funciones async cuando sea posible:
const connectDB = async (url) => { // *** Make it an `async` function await mongoose.connect(url, { // *** Await connection useNewUrlParser: true, useUnifiedTopology: true }); console.log('Connected to database'); // *** Connection worked }; const port = process.env.PORT || 5000; const mongoURI = process.env.MONGO_URI; //start const start = async () => { try { await connectDB(mongoURI); // ** Now you'll see errors here app.listen(port, () => console.log(`Server running at ${port}`)); } catch (error) { console.log(error); } }; start();"promesa" ( funciones asíncronas si lo desea): arroja un error en .catch() , si no se especifica, actúa como de costumbre
"habitual": arroja un error en el bloque try{}catch(){}
const port = process.env.PORT || 5000; const mongoURI = process.env.MONGO_URI; // // // mongoose.connect(mongoURI, { useNewUrlParser: true, useUnifiedTopology: true, // useFindAndModify: false, // useCreateIndex: true, }).catch((e)=>{ console.log('db error', e.message); }); // // // (async()=>{ // main code })(); app.listen(port, ()=>console.log(`Server running at http://localhost:${port}/`));Refactoricé un poco el código, fue doloroso verlo 🙂🙂🙂