Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

296
Views
ExpressJS: ¿La mejor manera de separar rutas y aceptar parámetros?

Creé un sistema Express.js donde los archivos en la carpeta /routes actúan como una ruta clásica (pero con un archivo por ruta)

Ejemplo: /routes/get/user.js será accesible con http://localhost:8080/user (el /get es para métodos separados, puede ser /post , /put ...)

Aquí está mi archivo index.js completo: https://pastebin.com/ALtSeHXc

Pero en realidad, mi problema es que no puedo pasar parámetros a la URL como https://localhost:8080/user/random_id_here .

Con este sistema, creo que la mejor idea es encontrar una manera de pasar parámetros también en archivos separados, pero no sé cómo se puede hacer...

Aquí hay un ejemplo de uno de mis archivos separados:

 module.exports = class NameAPI { constructor(client) { this.client = client } async run(req, res) { // Code here } }

Tal vez tenga un sistema mejor o una solución para esto. Gracias.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Puede obtener los parámetros opcionales del objeto de módulo que ya tiene para que cada módulo especifique sus propios parámetros. Este ejemplo a continuación muestra simplemente agregar nuevos parámetros después del nombre del módulo, pero podría ampliar esta función para que sea más rica si lo necesita.

En una implementación simple, en su cargador, puede cambiar esto:

 posts.forEach((post) => { const module = new (require(`./routes/post/${post}`))(this); this.api.post(`/${post}`, async (req, res) => await module.run(req, res)) })

a esto:

 posts.forEach((post) => { const module = new (require(`./routes/post/${post}`))(this); const urlParams = module.params || ""; this.api.post(`/${post}${urlParams}`, async (req, res) => module.run(req, res)) });

Entonces, si una ruta dada quisiera que se le agregara el parámetro de URL adicional /:id , entonces simplemente definiría la propiedad .urlParams en su objeto de módulo exportado para que sea `"/:id" y eso se incluiría automáticamente en la definición de la ruta .


PD La mayor parte del código en cada una de las ramas de su declaración de switch en _loadHttpMethode() es idéntico. Con un poco de factorización en una función común y uno o dos parámetros pasados a esa función, puede eliminar todo el código copiado entre esas diferentes ramas del interruptor para que todo lo que haga cada interruptor sea llamar a una función y pasarle algunos argumentos.

about 4 years ago · Juan Pablo Isaza Report

0

Por lo general, configuraría mi expreso para que se maneje de esta manera en caso de que desee una inserción dinámica. ¡Este es un código personal, así que haga los ajustes necesarios u observe el comportamiento! :)

 WEBAPP.get('/room/:name', (req, res) => { // Check if URL ends with / (in my case I don't want that) if (req.url.endsWith('/')) return res.redirect('/'); // Check if URL param "name" matches my regex ex. Username1920 or redirect them if (req.params.name.match(/^[a-zA-Z0-9]{3,24}$/) === null) return res.redirect('/'); // render the room (sending EJS) res.render('room', { title: req.params.name.toUpperCase() }); }); /* /*This example accepts one param and must follow my regex/rules*/

Entonces, si le entregaron /room/test12345, su req.params.name devolvería un valor. Observe los dos puntos para definir un parámetro, por lo que podría tener //room/:user/:request y devolvería: req.params.room, req.params.user, req.params.request, ¡todo definido! :)

about 4 years ago · Juan Pablo Isaza Report

0

Cómo separar rutas y analizar el parámetro de solicitud en la API express

Simplemente puede poner todos sus diferentes métodos API para cada modelo en una carpeta separada y luego analizar las rutas API en su archivo principal.

Digamos que tenemos un archivo principal llamado app.js, y puede organizar sus rutas/puntos finales de API en subcarpetas.

estructura de carpetas:

 ├── app.js └── routes └── api └── users.js

users.js en la carpeta route routes/api en este caso contiene todas las operaciones para el punto final de sus usuarios, y usted importa esto en su archivo app.js

Según los ejemplos de ruta definidos a continuación, esto le permitirá analizar su API express con estos puntos finales:

 GET YOUR_API:PORT/users // fetch all users GET YOUR_API:PORT/users/:userId // fetch single user by id

aplicación.js

 // this is just a demo app.js, please adapt to your needs const express = require("express"); // express app const app = express(); app.use(express.json()); // api routes // endpoint No. 1, this will create the endpoint /users // and will enable you to use all methods defined in file users.js app.use("/users", require("./routes/api/users")); // add more endpoints, example endpoint No. 2 app.use("/ENDPOINT_NAME", require("./routes/api/FILE_NAME")); // handle everything else you need to handle in your main file // run server const PORT = process.env.PORT || 5000; app.listen(PORT, () => console.log(`Server started on port ${PORT}`));

en la subcarpeta rutas/api agregas tus archivos de ruta api, así:

rutas/api/usuarios.js

 const express = require('express'); const router = express.Router(); // here we only GET all users and user by id, // but you can add any endpoints required for your API. // get all users router.get('/', async (req, res) => { try { // do something to get all users const allUsers = // fetch all users, depends on how you want to do it return res.status(200).json(allUsers) } catch (err) { console.log(err) return res.status(400).json({ msg: 'Bad request.' }) } }) // get a specific user by Id from request parameters router.get('/:userId', async (req, res) => { try { // user id from params const userId = req.params.userId // do something with this userId, for example look up in DB return res.status(200).json({userId: `Requested userId is ${userId}`}) ) } catch (err) { console.log(err) return res.status(400).json({ msg: 'Bad request.' }) } }) // add more user endpoints here // with router.post, router.put, router.delete, whatever you need to do module.exports = router
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!