Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

199
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda