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

205
Views
Express.js: anteponga la subruta a todas las rutas definidas

Digamos que tengo una aplicación Express definida en un archivo, digamos server.js así:

 const app = express(); app.use('/foo', foo); app.use('/bar', bar); module.exports = app;

Importo esta aplicación Express en otro archivo, digamos index.js :

 const app = require('./server'); const port = process.env.PORT || 3000; const listen = (port) => { app.listen(port, () => { console.log(`Backend listening on port ${port}!`); }); }; listen(port);

Ahora, las rutas que están disponibles para esta aplicación son /foo y /bar .

¿Hay alguna forma de editar la configuración en el archivo index.js para que las rutas se conviertan en /api/foo y /api/bar ? Sin tocar el archivo server.js .

Caso de uso:

Tengo una aplicación Nuxt.js con un backend que se carga en la aplicación Nuxt a través de la propiedad serverMiddleware en nuxt.config.js así:

 serverMiddleware: [ ... { path: '/api', handler: '~/server.js' }, ],

Esto tiene un efecto similar al que describí anteriormente: importa la aplicación express de la aplicación server.js y antepone todas sus rutas con /api .

Sin embargo, a menudo no quiero desarrollar la parte frontal de la aplicación Nuxt , solo quiero hacer cambios en el backend. Para este propósito, tengo un archivo de ayuda como index.js arriba, que se ejecuta solo en el backend. (Frontend a menudo toma mucho tiempo para compilar, es por eso que no quiero compilarlo cuando no lo necesito).

Esto crea el problema de que todas las rutas son ligeramente diferentes: carecen de /api al principio. Las rutas se están utilizando en diferentes herramientas como Postman, etc. y de repente no funcionaban.

Mi solución actual es definir el archivo index.js de la misma manera que el archivo server.js con todas las rutas definidas como las quiero, en lugar de app.use('/foo', foo); hay app.use('/api/foo', foo); etc. pero esto tiene sus propios problemas, por ejemplo, si cambio server.js , tengo que cambiar index.js . Busco algo más elegante.

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

0

De acuerdo con los documentos express 4.0 https://expressjs.com/en/4x/api.html#app.use , puede usar una instancia de application de la misma manera que lo haría con un router . En resumen, simplemente use la exportación de su server.js como un middleware en la ruta en la que desea insertarlo, en lugar de llamar directamente a .listen() en él.

Aquí hay un código de demostración que funcionó para mí:

 const express = require('express'); const app_inner = express(); app_inner.use('/foo', (req,res) => res.send('foo')); const app_outer = express(); app_outer.use('/foo2', app_inner); app_outer.listen(9999); // web browser at localhost:9999/foo2/foo returns 'foo' as expected
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!