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

277
Vistas
Mongoose {strict: throw} no arroja error

Traté de encontrar la respuesta a esta pregunta en todas partes, pero parece que no tuve suerte.

Tengo un modelo de mangosta muy simple.

 var userObject = { profile: { username: { type: String, required: true, lowercase: true }, firstname: { type: String, required: true }, lastname: { type: String, required: true }, img: { type: String, required: true, match: /^(https?:\/\/)/i }, email: { type: String, match: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/, required: true }, singupdate: { type: Date, default: Date.now } } };

Y, cuando creo el esquema, elijo la opción para arrojar un error cuando agrego propiedades que no están en el modelo.

 new mongoose.Schema(userObject, { strict: "throw" });

Así es como traté de detectar el error. Cuando agrego propiedades válidas, el proceso se ejecuta y recibo los documentos creados, pero cuando agrego propiedades no válidas, el proceso nunca se cierra y los registros nunca aparecen en la consola.

 try { User.create(users, function(err, docs) { console.log("err: " + err); console.log("docs: " + docs); }); } catch (e) { console.log(e.message); }

¿Qué estoy haciendo mal?

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

0

Los documentos dicen:

https://mongoosejs.com/docs/guide.html#strict

La opción estricta (habilitada de forma predeterminada) garantiza que los valores pasados a nuestro constructor de modelos que no se especificaron en nuestro esquema no se guarden en la base de datos.

La opción estricta también se puede configurar para "lanzar", lo que provocará que se produzcan errores en lugar de descartar los datos incorrectos.

Pero no significa lo que crees que significa.

NOTA: Cualquier clave/valor establecida en la instancia que no exista en su esquema siempre se ignora, independientemente de la opción de esquema.

Entonces, 'Datos incorrectos' solo abarca datos que están en el esquema pero en un formato incorrecto. Cualquier dato adicional que NO esté en el esquema se eliminará silenciosamente, causando la máxima pérdida de cabello y violando POLA.

over 4 years ago · Santiago Trujillo Denunciar

0

Si agrega propiedades que no son parte del modelo, desde mongoose doc :

La opción estricta (habilitada de forma predeterminada) garantiza que los valores pasados a nuestro constructor de modelos que no se especificaron en nuestro esquema no se guarden en la base de datos.

Funciona así incluso con strict:throw , por lo que no tiene que preocuparse por los campos adicionales a los que no se hace referencia en el modelo.

Con respecto a la excepción no activada, Aaron Heckmann habla de esto en esta publicación con respecto a una excepción que no se activa en un save con strict : throw :

Esto es más un malentendido de cómo funciona la mangosta. la opción 'estricta' permite la validación de claves/valores que intentan almacenarse en la base de datos. los esquemas crean getters/setters en instancias de documentos que se delegan a los métodos doc.{g,s}et() que están validados. adjuntar datos adhoc a una instancia de documento de mangosta no activa get/set() y, como tal, no garantiza la validación, ya que no hay forma de que ese día se guarde en la base de datos.

Como los campos adicionales no forman parte del modelo, no activan esas validaciones, por lo que no se activa ninguna excepción (y, por supuesto, esos campos no se guardan en la base de datos)

Se lanzarán excepciones solo si sus campos que pertenecen al modelo fallan esta validación

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