Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

410
Vistas
NodeJS Mongoose manejar la conexión de la base de datos falló la excepción

Estoy creando una API de servicio web relajante usando NodeJS. Usa Mongoose como ODM y usa MongoDB para el backend. A continuación explicaré mi escenario.

Inicié el servidor nodejs. Después de eso, cerré la base de datos MongoDB. Luego llame a la llamada GET api, no detecta ningún error y la llamada api se bloquea.

configuración de la base de datos en el archivo main.js

 var mongoose = require('mongoose'); var uri = 'mongodb://localhost/mydb'; mongoose.Promise = global.Promise; var options = { server: {socketOptions: { keepAlive: 300000, connectTimeoutMS: 10000 } } } ; mongoose.connect(uri,options); var db = mongoose.connection; db.on('error',console.log.bind(console,'connection refused !!!!!')); db.once('open', console.log.bind(console,'connection success !!!!!'));

esta es mi llamada GET básica

 var express = require('express'); var router = express.Router(); var mongoose = require('mongoose'); var rootRes = require('../model/rootresources.js'); router.get('/', function(req, res, next) { rootRes.find({},function (err, rootResource) { if (err){ console.log('Error occurd !!!') } res.json(rootResource); }); });

Incluso la conexión de la base de datos falló, el código no va al bloque de errores. Por lo tanto, no capturó el rechazo de la base de datos cuando falla la conexión de la base de datos en la llamada API.

Quiero capturar ese error y enviar el error interno del servidor (código: 500) al cliente. Traté de encontrar la solución pero aún no pude encontrarla ¿Alguna solución o cometí un error?

gracias amila

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

¿Puso las dos partes del código en el mismo archivo (es decir, main.js) o en dos archivos diferentes?

colóquelos en el mismo archivo y ejecute node main.js para lanzar excepciones.

 // main.js var mongoose = require('mongoose'); var uri = 'mongodb://localhost/mydb'; mongoose.Promise = global.Promise; var options = { server: {socketOptions: { keepAlive: 300000, connectTimeoutMS: 10000 } } } ; mongoose.connect(uri,options); var db = mongoose.connection; db.on('error',console.log.bind(console,'connection refused !!!!!')); db.once('open', console.log.bind(console,'connection success !!!!!')); var express = require('express'); var router = express.Router(); var mongoose = require('mongoose'); var rootRes = require('../model/rootresources.js'); router.get('/', function(req, res, next) { rootRes.find({},function (err, rootResource) { if (err){ console.log('Error occurd !!!') } res.json(rootResource); }); });

las excepciones son:

 connection refused !!!!! { MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017] etc...

Entonces, creo que tal vez pongas códigos sobre express en un archivo como index.js y códigos sobre la mongoose connection en otro archivo. Y simplemente ejecute node index.js en la línea de comando. Si bien la ejecución de códigos en index.js no incluirá códigos en otros archivos, los códigos en main.js no se ejecutarán. Como resultado, no hay información de error.

Actualizaciones Dos formas de Conozco dos formas de hacer esto:

1. En main.js, cree la función que crea una conexión a la base de datos y devuelve una instancia de db para que pueda llamarla función en su código principal.

 // main.js like this var mongoose = require('mongoose'); function createConnection(url) { mongoose.connect(url,options); var db = mongoose.connection; db.on('error',console.log.bind(console,'refused !!!!!')); db.once('open', console.log.bind(console,'success !!!!!')); return db; } // export function module.exports = createConnection; // in your index.js var createConnection = require('./main.js'); var db = createConnection(url); // other codes here

2. Usar require o vm para compilar y ejecutar código javascipt. Puede encontrar detalles de vm api aquí

 //main.js var mongoose = require('mongoose'); var uri = 'mongodb://localhost/mydb'; mongoose.Promise = global.Promise; var options = { server: {socketOptions: { keepAlive: 300000, connectTimeoutMS: 10000 } } } ; mongoose.connect(uri,options); var db = mongoose.connection; db.on('error',console.log.bind(console,'connection refused !!!!!')); db.once('open', console.log.bind(console,'connection success !!!!!')); // index.js // require will load file and execute automaticly var scriptSrc = require('./main'); // other codes here

Puede pensar en la segunda forma usando eval('var mongoose = require('mongoose'); var uri = 'mongodb://localhost/mydb'; etc... )

over 4 years ago · Santiago Trujillo Denunciar

0

La conexión de mangosta no ocurre a menos que haga clic en una solicitud. así que es mejor que lo maneje en su primer middleware de solicitud. vea la información del código a continuación.

 module.exports = function () { return function (req, res, next) { mongoose.connect(URL, MONGO_OPTIONS); mongoose.connection .once('open', () => { }) .on('error', (error) => { res.status(401).json({}); }); ...

Luego pase el middleware anterior a su enrutador: avíseme si necesita más explicaciones

 router.get('/', myMiddleware(){})
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda