Filtro de Madrid: una ruta diferente con dos instagrammers

Quiero lograr algo como esto / productos muestra todos los productos y / productos /: categoría muestra todos los productos relacionados con una categoría específica. Para lograrlo tengo las siguientes rutas:

Problema

Cuando cambio entre categorías, todo está bien, cuando cambio entre todos los productos y productos de categoría, y viceversa, Angular vuelve a dibujar los componentes y hay un parpadeo.

La versión final de Angular 2 Router no tiene Regex, por lo que yo sé. ¿Hay algo que me falta, o por ahora esta es la única solución?

Declaración completa

Método: actualmente es compatible con 'DELETE', 'GET', 'HEAD', 'PATCH', 'POST', 'PUT' y 'OPTIONS'. También podría ser una variedad de métodos.

url: la ruta de la url para que coincida con esta ruta (alias: ruta).

esquema: un objeto que contiene los esquemas para la solicitud y la respuesta. Deben estar en formato de esquema JSON, consulte aquí para obtener más información.

  • cuerpo: valida el cuerpo de la solicitud si es una POST o una PUT.
  • querystring o query: valida la cadena de consulta. Este puede ser un objeto de esquema JSON completo, con el tipo de propiedad del objeto y el objeto de propiedades de los parámetros, o simplemente los valores de lo que estaría contenido en el objeto de propiedades como se muestra a continuación.
  • params: valida los params.
  • respuesta: filtrar y generar un esquema para la respuesta, establecer un esquema nos permite tener un 10-20% más de rendimiento.

attachValidation: adjunte validationError a la solicitud, si hay un error de validación de esquema, en lugar de enviar el error al controlador de errores.

onRequest (solicitud, respuesta, hecho): una función tan pronto como se recibe una solicitud, también podría ser una matriz de funciones.

validación previa (solicitud, respuesta, hecho): una función llamada después de los ganchos de validación compartida, útil si necesita realizar autenticación a nivel de ruta, por ejemplo, también podría ser una matriz de funciones.

preHandler (solicitud, respuesta, hecho): una función llamada justo antes del controlador de solicitud, también podría ser una matriz de funciones.

preSerialización (solicitud, respuesta, carga útil, hecho): una función llamada justo antes de la serialización, también podría ser una matriz de funciones.

controlador (solicitud, respuesta): la función que manejará esta solicitud.

schemaCompiler (esquema): la función que construye el esquema para las validaciones. Mira aquí

bodyLimit: evita que el analizador de cuerpo JSON predeterminado analice cuerpos de solicitud mayores que este número de bytes. Debe ser un entero. También puede configurar esta opción globalmente cuando cree por primera vez la instancia de Fastify con fastify (opciones). El valor predeterminado es 1048576 (1 MiB).

logLevel: establece el nivel de registro para esta ruta. Vea abajo.

config: objeto utilizado para almacenar la configuración personalizada.

version: una cadena compatible con semver que definió la versión del punto final. Ejemplo.

prefixTrailingSlash: cadena utilizada para determinar cómo manejar pasar / como una ruta con un prefijo.

  • both (predeterminado): registrará ambos / prefix y / prefix /.
  • barra inclinada: solo registrará / prefijo /.
  • no-slash: solo registrará / prefijo.

solicitud se define en Solicitud.

la respuesta se define en Responder.

Declaración abreviada

La declaración de ruta anterior es más Hapi-como, pero si prefieres un Express / Restify enfoque, lo apoyamos también:
fastify.get (ruta, opciones, controlador)
fastify.head (ruta, opciones, controlador)
fastify.post (ruta, opciones, manejador)
fastify.put (ruta, opciones, controlador)
fastify.delete (ruta, opciones, manejador)
fastify.options (ruta, opciones, controlador)
fastify.patch (ruta, opciones, controlador)

fastify.all (ruta, opciones, controlador) agregará el mismo controlador a todos los métodos admitidos.

El controlador también se puede suministrar a través del objeto de opciones:

Nota: si el controlador se especifica tanto en las opciones como en el tercer parámetro del método de acceso directo, se genera un error de controlador duplicado.

Edificio url

Fastify admite URL estáticas y dinámicas.
Para registrar un paramétrico camino, usa el colon antes del nombre del parámetro. por comodín utilizar el estrella. Recuerde que las rutas estáticas siempre se verifican antes de los parámetros y los comodines.

Las rutas de expresión regular también son compatibles, pero presta atención, ¡RegExp es muy costoso en términos de rendimiento!

Es posible definir más de un parámetro dentro de la misma barra diagonal ("/"). Como:

Recuerde en este caso utilizar el guión ("-") como separador de parámetros.

Finalmente, es posible tener múltiples parámetros con RegExp.

En este caso, como separador de parámetros, es posible utilizar cualquier carácter que no coincida con la expresión regular.

Tener una ruta con múltiples parámetros puede afectar negativamente el rendimiento, por lo tanto, prefiera el enfoque de un solo parámetro siempre que sea posible, especialmente en las rutas que están en la ruta caliente de su aplicación. Si está interesado en cómo manejamos el enrutamiento, consulte find-my-way.

Async Await

¿Eres un usuario asíncrono / en espera? Te tenemos cubierto!

Como puede ver, no estamos llamando a reply.send para enviar los datos al usuario. ¡Solo necesita devolver el cuerpo y ya está!

Si lo necesita, también puede enviar los datos al usuario con reply.send.

Si la ruta está envolviendo una API basada en devolución de llamada que llamará a reply.send () fuera de la cadena de promesa, es posible esperar respuesta:

La respuesta de respuesta también funciona:

Advertencia:

  • Cuando se utilizan tanto el valor de retorno como el responder.send (valor) al mismo tiempo, el primero que sucede tiene prioridad, el segundo valor se descartará y un advertir el registro también se emitirá porque intentaste enviar una respuesta dos veces.
  • No puedes volver indefinido. Para más detalles lea promesa de resolución.

Resolución de la promesa

Si su controlador es una función asíncrona o devuelve una promesa, debe tener en cuenta un comportamiento especial que es necesario para admitir la devolución de llamada y el flujo de control de la promesa. Si la promesa del manejador se resuelve con indefinido, se ignorará y la solicitud se bloqueará y se error registro para ser emitido.

  1. Si desea utilizar async / await o promesas pero responda un valor con reply.send:
    • No devolver cualquier valor
    • No olvide llamar a reply.send.
  2. Si desea utilizar async / waitit o promesas:
    • No use reply.send.
    • No volver indefinido

De esta manera, podemos admitir tanto el estilo de devolución de llamada como la espera asíncrona, con la mínima compensación. A pesar de tanta libertad, recomendamos encarecidamente usar un solo estilo porque el manejo de errores debe manejarse de manera consistente dentro de su aplicación.

aviso: Cada función asíncrona devuelve una promesa por sí misma.

Prefijo de ruta

A veces necesita mantener dos o más versiones diferentes de la misma api, un enfoque clásico es prefijar todas las rutas con el número de versión de la api, / v1 / user, por ejemplo. Fastify le ofrece una forma rápida e inteligente de crear diferentes versiones de la misma API sin cambiar a mano todos los nombres de ruta, prefijo de ruta. Vamos a ver cómo funciona:

Fastify no se quejará porque está usando el mismo nombre para dos rutas diferentes, porque en el momento de la compilación manejará el prefijo automáticamente (¡Esto también significa que el rendimiento no se verá afectado en absoluto!).

Ahora sus clientes tendrán acceso a las siguientes rutas:

Puede hacerlo tantas veces como lo desee, también funciona para registros anidados y también se admiten parámetros de rutas. Tenga en cuenta que si usa fastify-plugin, esta opción no funcionará.

Manejo de / ruta dentro de complementos prefijados

La ruta / tiene un comportamiento diferente dependiendo de si el prefijo termina con / o no. Como ejemplo, si consideramos un prefijo / algo /, agregar una ruta / solo coincidirá con / algo /. Si consideramos un prefijo / algo, agregar una ruta / coincidirá con / algo y / algo /.

Vea la opción de ruta prefixTrailingSlash arriba para cambiar este comportamiento.

Nivel de registro personalizado

Puede suceder que necesite diferentes niveles de registro en sus rutas, Fastify lo logra de una manera muy sencilla.
Solo necesita pasar la opción logLevel a la opción de complemento o la opción de ruta con el valor que necesita.

Tenga en cuenta que si establece logLevel a nivel de complemento, también se verán afectados setNotFoundHandler y setErrorHandler.

O puede pasarlo directamente a una ruta:

Recuerde que el nivel de registro personalizado se aplica solo a las rutas, y no al Fastify Logger global, accesible con fastify.log

Defecto

Si es necesario, puede proporcionar una opción de versión, que le permitirá declarar varias versiones de la misma ruta. El control de versiones debe seguir la especificación semver.
Fastify detectará automáticamente el encabezado Accept-Version y enrutará la solicitud en consecuencia (los rangos avanzados y las versiones preliminares actualmente no son compatibles).
Tenga en cuenta que el uso de esta función provocará una degradación del rendimiento general del enrutador.

Si declara múltiples versiones con el mismo mayor o menor, Fastify siempre elegirá el más alto compatible con el valor del encabezado Accept-Version.
Si la solicitud no tiene el encabezado Accept-Version, se devolverá un error 404.

Ver el vídeo: Sexo en la frontera: prostitución en España. DW Documental (Febrero 2020).