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

146
Vistas
¿Cómo puedo refactorizar el código API en Javascript?

En el proyecto MEAN stack, hay 2 formas de funciones Express aquí: una que toma un parámetro de fecha y la otra que no, y la única diferencia es el segundo componente de URL y el nombre del método aws.

-->¿Cómo puedo definir 2 funciones con todo el código, que toman el componente URL como parámetro, construyen el nombre del método aws a partir de eso y luego devuelven la función Express, reduciendo así el código que necesitamos mantener?

archivo app.js

API que no toman la fecha como parámetro

 const AWS = require("../db/data"), aws = new AWS("aws_" + config.db.release.set); router.get('/data/quern', (req, res) => { aws.getdataquern() .then( record => { res.status(200).send(record) }, error => { res.status(500).send(error) }); }); router.get('/data/quern1', (req, res) => { aws.getdataquern1() .then( record => { res.status(200).send(record) }, error => { res.status(500).send(error) }); }); router.get('/data/quern2', (req, res) => { aws.getdataquern2() .then( record => { res.status(200).send(record) }, error => { res.status(500).send(error) }); });

Api's que toma la fecha como parámetro

 router.get('/data/withDate/:date', (req, res) => { aws.getdatawithDate(req.params.date) .then( record => { res.status(200).send(record) }, error => { res.status(500).send(error) }); }); router.get('/data/withDate1/:date', (req, res) => { aws.getdatawithDate1(req.params.date) .then( record => { res.status(200).send(record) }, error => { res.status(500).send(error) }); }); router.get('/data/withDate2/:date', (req, res) => { aws.getdatawithDat2(req.params.date) .then( record => { res.status(200).send(record) }, error => { res.status(500).send(error) }); });
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede usar una función común para todos ellos donde pasa el método aws que desea llamar como una cadena y pasa cualquier argumento que desee pasar a esa función. Además, tenga en cuenta que .status(200) no es necesario ya que ese ya es el estado predeterminado.

 const AWS = require("../db/data"), aws = new AWS("aws_" + config.db.release.set); function handleResponse(res, awsFnName, arg) { aws[awsFnName](arg).then( record => { res.send(record) }, error => { res.status(500).send(error) } ); } router.get('/data/quern', (req, res) => { handleResponse(res, "getdataquern"); }); router.get('/data/quern1', (req, res) => { handleResponse(res, "getdataquern1"); }); router.get('/data/quern2', (req, res) => { handleResponse(res, "getdataquern2"); }); router.get('/data/withDate/:date', (req, res) => { handleResponse(res, "getdatawithDate", req.params.date) }); router.get('/data/withDate1/:date', (req, res) => { handleResponse(res, "getdatawithDate1", req.params.date) }); router.get('/data/withDate2/:date', (req, res) => { handleResponse(res, "getdatawithDate2", req.params.date) });

Tenga en cuenta que si las declaraciones de ruta en sí mismas fueran realmente así de repetitivas, podrían basarse en una tabla en la que genere todas las rutas en un ciclo al iterar una tabla de parámetros. Así es como se podrían generar las rutas en sí:

 const AWS = require("../db/data"), aws = new AWS("aws_" + config.db.release.set); function handleResponse(res, awsFnName, arg) { aws[awsFnName](arg).then( record => { res.send(record) }, error => { res.status(500).send(error) } ); } ["quern", "quern1", "quern2"].forEach(suffix => { router.get(`/data/${suffix}`, (req, res) => { handleResponse(res, `getdata${suffix}`); }); }); ["withDate", "withDate1", "withDate2"].forEach(suffix => { router.get(`/data/${suffix}/:date`, (req, res) => { handleResponse(res, `getdata${suffix}`, req.params.date); }); });

Este código genera las seis rutas.


No siempre soy un gran admirador de las rutas generadas porque no es tan claro para un lector del código exactamente qué rutas está registrando este código. Obviamente, se puede resolver estudiando el código, pero el primer método anterior tiene algunas ventajas de mantenimiento, aunque tiene un poco más de redundancia en el código.

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