He administrado una base de servicio de API en Express JS. Tengo 2 o 3 clientes que solicitan mi API. Todas las solicitudes del cliente son manejadas por aplicaciones monolíticas únicas . Actualmente, manejo esa solicitud con este código:
const express = require('express'); const webRoute = require('./src/routes/web/index') const cmsRoute = require('./src/routes/cms/index'); app.use('/web', webRoute) app.use('/cms', cmsRoute) // This Code works just fine. The routes are defined by URL request Pero quiero que la solicitud de ruta no sea de Url , sino solicitada por sus encabezados. Parece que esta appKey = 'for-key' appName='web'
curl -X OBTENER \ http://localhost:3000/cms\ -H 'Autorización: Portador asfsfafgdgfdgddafaggafafasgfghhjhkgflkjkxjvkjzvxzvz' \ -H 'Cartero-Token: c36d6d5a-14b7-40bf-85e0-1bf255c815de' \ -H 'appKey: registradores de teclas' \ -H 'appName: web (quiero por este encabezado)' \ -H 'control de caché: sin caché'
Gracias por todos.
editar notas:
En mi código actual, para llamar a una API estoy usando esto:
https://localhost:3000/cms/user/profile or https://localhost:3000/web/user/profile Quiero que todas las solicitudes usen solo https://localhost:3000/user/profile sin agregar un prefijo web o cms
Según un comentario, parece que desea utilizar un solo formulario de URL como:
https://localhost:3000/user/profile Y enrutarlo al enrutador correcto según el encabezado personalizado appName .
Puede hacerlo simplemente verificando el valor del encabezado personalizado y enviando manualmente la solicitud al enrutador deseado.
const webRoute = require('./src/routes/web/index') const cmsRoute = require('./src/routes/cms/index'); // custom middleware to select the desired router based on custom header app.use((req, res, next) => { const appName = req.get("appName"); if (appName === "web") { webRoute(req, res, next); } else if (appName === "cms") { cmsRoute(req, res, next); } else { next(); } });Puede usar una ruta predeterminada, luego, según los encabezados de solicitud, puede redirigir a su ruta.
//consider this a default route. You can arrange any in your program router.get('/', function (req, res) { // switch on request header variable value switch (req.get("appName")) { case "web": res.redirect('/web') break; case "cms": res.redirect('/cms') break; } })