Express Router que coincide con rutas incorrectas con enrutador anidado. Uso -- de.js campo con express camp Relacionados El problema

express router matching wrong routes with nested router.use


0
vote

problema

Español

He creado algunas rutas anidadas, por lo que la ruta base es import Vue from 'vue' import VueResource from 'vue-resource' import Cookies from 'js-cookie' import App from './App.vue' import i18n from './lang/lang' import store from './store' import router from './router' Vue.use(VueResource) Vue.config.productionTip = false Vue.config.language = Cookies.get('lang') Vue.config.country = Cookies.get('country') Vue.config.currency = Cookies.get('cur') export const localeStrings = { en: 'English', de: 'Deutsch', fr: 'Français', it: 'Italiano', nl: 'Nederlands', sv: 'Svenska', es: 'Español', ja: '日本語' } export const app = new Vue({ el: '#app', router, store, i18n: i18n, render: h => h(App), created () { this.$store.dispatch('setLang', Vue.config.language) this.$store.dispatch('setCountry', Vue.config.country) } }) 4 y luego coincide con otras rutas

I.E import Vue from 'vue' import VueResource from 'vue-resource' import Cookies from 'js-cookie' import App from './App.vue' import i18n from './lang/lang' import store from './store' import router from './router' Vue.use(VueResource) Vue.config.productionTip = false Vue.config.language = Cookies.get('lang') Vue.config.country = Cookies.get('country') Vue.config.currency = Cookies.get('cur') export const localeStrings = { en: 'English', de: 'Deutsch', fr: 'Français', it: 'Italiano', nl: 'Nederlands', sv: 'Svenska', es: 'Español', ja: '日本語' } export const app = new Vue({ el: '#app', router, store, i18n: i18n, render: h => h(App), created () { this.$store.dispatch('setLang', Vue.config.language) this.$store.dispatch('setCountry', Vue.config.country) } }) 5 OR import Vue from 'vue' import VueResource from 'vue-resource' import Cookies from 'js-cookie' import App from './App.vue' import i18n from './lang/lang' import store from './store' import router from './router' Vue.use(VueResource) Vue.config.productionTip = false Vue.config.language = Cookies.get('lang') Vue.config.country = Cookies.get('country') Vue.config.currency = Cookies.get('cur') export const localeStrings = { en: 'English', de: 'Deutsch', fr: 'Français', it: 'Italiano', nl: 'Nederlands', sv: 'Svenska', es: 'Español', ja: '日本語' } export const app = new Vue({ el: '#app', router, store, i18n: i18n, render: h => h(App), created () { this.$store.dispatch('setLang', Vue.config.language) this.$store.dispatch('setCountry', Vue.config.country) } }) 6

Ahora esas rutas también tienen sus rutas secundarias

i.e

  import Vue from 'vue' import VueResource from 'vue-resource' import Cookies from 'js-cookie' import App from './App.vue' import i18n from './lang/lang' import store from './store' import router from './router'  Vue.use(VueResource) Vue.config.productionTip = false  Vue.config.language = Cookies.get('lang') Vue.config.country = Cookies.get('country') Vue.config.currency = Cookies.get('cur')  export const localeStrings = {   en: 'English',   de: 'Deutsch',   fr: 'Français',   it: 'Italiano',   nl: 'Nederlands',   sv: 'Svenska',   es: 'Español',   ja: '日本語' }  export const app = new Vue({   el: '#app',         router,   store,   i18n: i18n,   render: h => h(App),   created () {            this.$store.dispatch('setLang', Vue.config.language)     this.$store.dispatch('setCountry', Vue.config.country)           }      }) 7  

Esto es lo que he hecho por esta configuración

app.js

  import Vue from 'vue' import VueResource from 'vue-resource' import Cookies from 'js-cookie' import App from './App.vue' import i18n from './lang/lang' import store from './store' import router from './router'  Vue.use(VueResource) Vue.config.productionTip = false  Vue.config.language = Cookies.get('lang') Vue.config.country = Cookies.get('country') Vue.config.currency = Cookies.get('cur')  export const localeStrings = {   en: 'English',   de: 'Deutsch',   fr: 'Français',   it: 'Italiano',   nl: 'Nederlands',   sv: 'Svenska',   es: 'Español',   ja: '日本語' }  export const app = new Vue({   el: '#app',         router,   store,   i18n: i18n,   render: h => h(App),   created () {            this.$store.dispatch('setLang', Vue.config.language)     this.$store.dispatch('setCountry', Vue.config.country)           }      }) 8  

cargador / rutas.js

  import Vue from 'vue' import VueResource from 'vue-resource' import Cookies from 'js-cookie' import App from './App.vue' import i18n from './lang/lang' import store from './store' import router from './router'  Vue.use(VueResource) Vue.config.productionTip = false  Vue.config.language = Cookies.get('lang') Vue.config.country = Cookies.get('country') Vue.config.currency = Cookies.get('cur')  export const localeStrings = {   en: 'English',   de: 'Deutsch',   fr: 'Français',   it: 'Italiano',   nl: 'Nederlands',   sv: 'Svenska',   es: 'Español',   ja: '日本語' }  export const app = new Vue({   el: '#app',         router,   store,   i18n: i18n,   render: h => h(App),   created () {            this.$store.dispatch('setLang', Vue.config.language)     this.$store.dispatch('setCountry', Vue.config.country)           }      }) 9  

En este punto, las rutas deben coincidir import Vue from 'vue' import VueI18n from 'vue-i18n' Vue.use(VueI18n) let i18n = new VueI18n({ locale: 'en', messages: {}, fallbackLocale: 'en', numberFormats: {} }) export default {i18n} 0

v1 / router / index.js

  import Vue from 'vue' import VueI18n from 'vue-i18n'  Vue.use(VueI18n)  let i18n = new VueI18n({   locale: 'en',   messages: {},   fallbackLocale: 'en',   numberFormats: {} })  export default {i18n} 1  

En este punto, las rutas deben coincidir con import Vue from 'vue' import VueI18n from 'vue-i18n' Vue.use(VueI18n) let i18n = new VueI18n({ locale: 'en', messages: {}, fallbackLocale: 'en', numberFormats: {} }) export default {i18n} 2

ahora servicerouter.js hace sub rutas.

  import Vue from 'vue' import VueI18n from 'vue-i18n'  Vue.use(VueI18n)  let i18n = new VueI18n({   locale: 'en',   messages: {},   fallbackLocale: 'en',   numberFormats: {} })  export default {i18n} 3  

El problema es

está golpeando import Vue from 'vue' import VueI18n from 'vue-i18n' Vue.use(VueI18n) let i18n = new VueI18n({ locale: 'en', messages: {}, fallbackLocale: 'en', numberFormats: {} }) export default {i18n} 4 para import Vue from 'vue' import VueI18n from 'vue-i18n' Vue.use(VueI18n) let i18n = new VueI18n({ locale: 'en', messages: {}, fallbackLocale: 'en', numberFormats: {} }) export default {i18n} 5

Original en ingles

I have created some nested routes, so base route is /api/v1 and then it matches other routes

i.e /cities or services

Now those routes also have their on sub routes

i.e

/api/v1/services  GET /  GET /services/:id 

This is what I have done for this setup

app.js

const express = require('express');  const app = express();  // load routes require('./loader/routes')(app); ... 

loader/routes.js

const router = require('express').Router();  const v1Router = require('../v1/router')(router );  module.exports = (app) => {   app.use('/api/v1', v1Router); }; 

At this point routes should match /api/v1

v1/router/index.js

const makeServiceRoutes = require('./ServiceRouter');  module.exports = (router) => {   router.use('/items', makeItemRoutes(router, ItemController));   router.use('/cities', makeCityRoutes(router, CityController));   router.use('/services', makeServiceRoutes(router, ServiceController));   return router } 

At this point routes should match to api/v1/services

Now ServiceRouter.js does sub routes.

module.exports = (router, ServiceController) => {   router.get('/', ServiceController.getAllServices);   router.get('/:id', ServiceController.getServiceById);   return router; }; 

The problem is

It is hitting api/v1/cities/:id for /api/v1/services

     

Lista de respuestas

0
 
vote
vote
La mejor respuesta
 

No monte router mismo. Cree y monte un nuevo enrutador secundario para ServiceRouter.js6 :

  module.exports = (ServiceController) => {   const router = require('express').Router();   router.get('/', ServiceController.getAllServices);   router.get('/:id', ServiceController.getServiceById);   return router; };   
 

Don't mount router itself. Create and mount a new sub router for ServiceRouter.js:

module.exports = (ServiceController) => {   const router = require('express').Router();   router.get('/', ServiceController.getAllServices);   router.get('/:id', ServiceController.getServiceById);   return router; }; 
 
 

Relacionados problema

7  Socket.IO: Obtenga la sesión de cliente en cualquier punto  ( Socket io get client sessionid at any point ) 
Sé cómo recuperar la sesión del cliente cuando el usuario se conecta. Pero me gustaría recuperarlo en cualquier momento, por ejemplo, cuando el cliente hace...

1  ¿Cómo otorgar acceso a una carpeta después de la autenticación en NODEJS con Express?  ( How to grant access to a folder after authentication in nodejs with express ) 
Soy nuevo en los NODEJS y he estado buscando una solución bastante en este momento y ninguno resuelve mi problema específico, lamentablemente. O al menos simp...

9  Explicación de rutas express.js  ( Express js routes explanation ) 
Estaba mirando a express.js < / a> Código fuente, para averiguar cómo se muestran los parámetros de ruta llamados a req.params Propiedades. Para aquellos...

4  Integración de Yeoman 1.0 con Express  ( Integration of yeoman 1 0 with express ) 
Tengo una aplicación web de AngularJS que construí con Yeoman, me gustaría integrar Express en la mezcla. La última parte es lo que estoy atascado. Tengo a Ye...

5  Express.js Manillar, obtenga los archivos de archivos estáticos Mantenga los cambios de acuerdo con la URL  ( Express js handlebars get static files directory keep changes according to url ) 
Soy nuevo para expresar. Básicamente mi pregunta es muy simple. Quiero servir archivos como / CSS JavaScript de un directorio público .. diseño.hbs <htm...

16  ¿Cómo encontrar la fuente de js_parse_error?  ( How to find source of js parse error ) 
Estoy ejecutando una aplicación expresa, y estoy recibiendo un js_parse_error. No puedo entender por qué. Básicamente, he comentado todo el nuevo código que h...

0  Error al ejecutar la aplicación EXTJS 6.2 SENTA CMD generada en el nodo JS  ( Failed to run sencha cmd generated extjs 6 2 app on node js ) 
Estoy tratando de ejecutar mi aplicación EXTJS 6.2 existente generada con Sencha Cmd en Node.js. Abajo es mi app.js: const express = require('express'); co...

2  Mangosta con mongodb atlas devuelva la matriz vacía  ( Mongoose with mongodb atlas return empty array ) 
Estoy tratando de conectar express.js con Mongodb Atlas y Mangoose, pero el servidor siempre devuelve una matriz vacía '[]'. Cuando carga una base de datos lo...

2  ¿Servir contenido diferente a los usuarios móviles?  ( Serve different content to mobile users ) 
Tengo la intención de que mi aplicación nodejs / express sea utilizada únicamente por usuarios móviles, con los usuarios de Dekstop que reciben contenido comp...

37  Nodo.js: Solicitud y respuesta de HTTP simulacros  ( Node js mock http request and response ) 
¿Hay una manera conveniente de burlarse de los objetos de solicitud y respuesta HTTP para las pruebas de la unidad? ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos