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

197
Vistas
Manejo de parámetros de consulta complejos Express.Js

Estoy haciendo REST APIS con Express.js. Tengo la siguiente ruta expresa:

/api/customer

Agregué múltiples parámetros de consulta a la ruta de esta manera:

 /api/customer?name=jake /api/customer?country=america /api/customer?name=jake&country=america /api/customer?name=jake&limit=10

En mis controladores, manejo todos estos con If y hay tantos casos que siento que este método no escalaría, ¿hay una mejor manera de manejar esto?

Este es el código de mi controlador, estoy usando Sequelize para consultar la base de datos:

 async function getAllCustomer(queryLimit, page) { const customers = await Customer.findAll({ limit: queryLimit ? parseInt(queryLimit) : null, offset: page ? parseInt(queryLimit) * parseInt(page) : null }); return customers; } async function getCustomerByFirstName(name, queryLimit, page) { return await Customer.findAll({ where: { firstName: name, } }) } async function getCustomerByAddress(address) { return await Customer.findAll({ where: { customerAddress: address } }) } async function getCustomerByNameAddress(name, address) { return await Customer.findAll({ where: { [Op.and]: [ {firstName: name}, {customerAddress: address} ] } }) } async function getCustomer(req, res) { const page = req.query.page; const queryLimit = req.query.limit; const name = req.query.name; const address = req.query.address; let customers; /* User want to find first names */ if (name && !address) { const names = name.split(",") customers = await getCustomerByFirstName(names, queryLimit, page) res.status(200).send(customers) return; } /* User want to find addresses */ if (!name && address) { const addresses = address.split(",") customers = await getCustomerByAddress(addresses, queryLimit, page) res.status(200).send(customers) return; } /* User want to mix both */ if (name && address) { const names = name.split(",") const addresses = address.split(",") customers = await getCustomerByNameAddress(names, addresses, queryLimit, page) res.status(200).send(customers) return; } if (!name && !address) { customers = await getAllCustomer(queryLimit, page) res.status(200).send(customers) return; } }
about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Podrías hacer algo como esto:

 async function getCustomer(req, res) { const page = req.query.page; const queryLimit = req.query.limit; const name = req.query.name; const address = req.query.address; let query = { }; if(name) { query.firstName = name; } if(address) { query.address = address; } let customers = await getCustomers(query, queryLimit, page); res.status(200).send(customers) return; } async function getCustomers(query, queryLimit, page) { const customers = await Customer.findAll({ where: query, limit: queryLimit ? parseInt(queryLimit) : null, offset: page ? parseInt(queryLimit) * parseInt(page) : null }); return customers; }

Por cierto, en su código, las funciones getCustomerByFirstName , getCustomerByAddress y getCustomerByNameAddress esperan recibir el name y address como parámetro de cadena, pero está pasando una matriz de names y addresses . Esto podría dar lugar a errores...

about 4 years ago · Santiago Gelvez 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