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

109
Vistas
Fábrica de API Express Mongoose

Estoy tratando de crear una fábrica de API para node.js, Express, Mongoose Tech stack. También quiero proporcionar seguridad de tipo completa usando Typescript y la opción de agregar validación adicional para creación y actualizaciones. Por ejemplo, tengo un "validador" así:

 type ICheckIfUnique = <M, T extends Model<M>, K extends keyof M>( attributes: { model: T; key: K; }, body: M ) => void; export const checkIfUnique: ICheckIfUnique = async (attributes, body) => { const { model, key } = attributes; const value = body[key]; const isUnique = !(await model.findOne({ [key]: value })); if (!isUnique) { throw `${key} is not unique!`; } };

Pero no puedo obtener el tipo correcto cuando obtengo:

ingrese la descripción de la imagen aquí

Tampoco puedo encontrar la forma de obtener tipos de modelos personalizados para los métodos de fábrica:

 export const factoryCreateEndpoint = <T, D extends Model<T>>(model: D, additionalLogic?: any) => async (req: Request, res: Response): Promise<Response | undefined> => { const body = req.body; if (!body) { return res.status(400).json({ success: false, error: `You must provide ${capitalize( model.collection.name.slice(0, -1) )}.`, }); } if (additionalLogic) { try { for (const element in additionalLogic) { const { validator, additionalVariables } = additionalLogic[element]; await validator(additionalVariables, req.body); } } catch (error) { return res.status(400).json({ success: false, error }); } } try { const object = new model(body); await object.save(); return res.status(201).json({ success: true, id: object._id, message: `${capitalize(model.collection.name.slice(0, -1))} created.`, }); } catch (error) { return res.status(400).json({ success: false, error }); } };

Pero con este tipo genérico obtengo:

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza
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