1, 2, 3... ¡Fastify!

Rate this content
Bookmark

En mi viaje por el mundo de Node, siempre me pregunto cuánto cuestan mis abstracciones.


Comencé un viaje para escribir un framework HTTP con una sobrecarga extremadamente baja, y nació Fastify. Con su capacidad para alcanzar asombrosas 90k solicitudes/segundo, Fastify puede reducir a la mitad tu factura de servidor en la nube.


En esta charla, te guiaré a través de los conceptos básicos del framework: cómo enrutamiento de solicitudes, escribir pruebas y usar el sistema de plugins.

36 min
18 Jun, 2021

Video Summary and Transcription

Fastify es un framework web que comenzó en 2016 y es fácil de usar. Admite el registro, dividir la aplicación en archivos separados y cargar rutas automáticamente. Fastify también proporciona autenticación y funcionalidad de inicio de sesión de usuario. Se diferencia de otros frameworks al admitir completamente Async Await y las últimas características de JavaScript. Matteo Collina, el ponente, prefiere Vim y T-Max como su IDE y disfruta de la pizza italiana como su comida reconfortante.

Available in English

1. Introducción a Fastify

Short description:

Soy Matteo Collina, aquí para hablar sobre Fastify. Fastify es un marco web que comenzó en 2016. Instálalo con NPM. Fácil de usar. Construyamos una aplicación simple. Importa Fastify. Usa Node 14. Crea la aplicación. Escucha en el puerto 3000. Servidor iniciado. Ruta no encontrada. Sin registros.

Todos, soy Matteo Collina. Y estoy aquí hoy para hablarles sobre Fastify. Por favor, tómense un momento para seguirme en Twitter, en Matteo Collina. Publico tweets sobre el desarrollo de Node.js y muchas otras cosas. Así que sí, tal vez les parezca interesante.

De todos modos, estamos aquí para hablar sobre Fastify. Esto es, ya saben, todos estamos remotos, todo está distribuido alrededor del mundo. Así que en esta charla, voy a intentar algo que normalmente no hago en el escenario. Así que veamos cómo va. Primero que nada, Fastify es un marco web que Thomas De La Vedo y yo comenzamos en 2016. Y ahora está llegando a la versión principal 3, que se lanzará pronto.

De todos modos, ¿cómo se instala? NPM install Fastify. Y en realidad es muy fácil de usar. Sin embargo, no vamos a hablar mucho al respecto, pero vamos a usarlo para construir una aplicación muy, muy simple. Primero que nada, podemos comenzar teniendo nuestro propio servidor e importando Fastify. Oh, por cierto, amigos, voy a usar Node 14. ¿Por qué? Porque quiero usar las nuevas características de ESM de Node Core. Así que eso es lo que vamos a usar. Podemos hacer import Fastify from Fastify. Luego puedo crear mi aplicación. Y luego puedo hacer app.listen en el puerto 3000. ¡Vaya! OK. Entonces tal vez este servidor. Oh, y VMUse 14. Hey, así que este servidor ha iniciado. Y luego puedo hacer curl y luego, oh, bueno, ruta no encontrada. Sí, no agregamos ninguna. Así que tiene total sentido. Sin embargo, si lo miras, tampoco registró nada.

2. Agregando un Registrador

Short description:

Podemos agregar un registrador configurando logger true. En desarrollo, establece pretty print true para obtener una salida más agradable. El registrador registra dos veces para cada solicitud, cuando entra y cuando sale.

Tal vez solo queramos agregar un poco de un registrador aquí. Lo cual probablemente sea útil. Podemos hacer logger true y podemos iniciarlo nuevamente. Oh, ahora dice servidor escuchando. Registra en una nueva línea. JSON delimitado, utiliza otra biblioteca llamada Pinot para registrar. Aún así, obtenemos alguna salida de ello. Sin embargo, si estamos en desarrollo, lo que realmente puedes hacer es hacer pretty print true solo en desarrollo. Y si hacemos esto, obtendremos una salida un poco más agradable. Ten en cuenta que registra dos veces para cada solicitud, registra cuando una solicitud entra y cuando una solicitud sale. Bastante agradable y práctico.

3. Dividiendo la Aplicación y Usando Fastify Auto-load

Short description:

Dividimos la aplicación en otro archivo llamado app.js. Creamos un complemento de Fastify y agregamos rutas. Podemos usar un módulo llamado Fastify auto-load para cargar rutas desde un archivo separado. Creamos una carpeta de rutas y un archivo hello.js. Copiamos el bloque de código en hello.js y agregamos el complemento. Listo.

Bien, eso es lo básico de nuestra aplicación. Hemos iniciado Fastify. Entonces, lo que queremos hacer ahora es dividirlo porque, ya sabes, no podemos simplemente codificar en un solo servidor. Así que lo que vamos a hacer es crear otro archivo llamado app.js.

Entonces, lo que hacemos, lo hacemos por defecto y luego creamos lo que llamamos un complemento de Fastify. Y mi app. Entonces, app y podemos agregar nuestras rutas aquí. Por ejemplo, obtener barra diagonal y luego asincrónico y luego devolver una palabra baja. Hola, soy una persona de comillas simples. De todos modos, eso es todo. Estamos aquí. Entonces, si reinicio esto y luego ocurre, ¡guau, todavía no funciona! Necesito cargar esto realmente. Entonces, lo que puedo hacer, puedo hacer app register. Puedo usar import porque estamos usando ESM, ¿verdad? Entonces app.js y aquí vamos. Bien, ahora está funcionando. Nuevamente, hemos movido esto a otro archivo pero esto sigue siendo un poco personalizado y un poco más complicado.

Entonces, una de las cosas que podemos hacer es usar un módulo llamado, en lugar de poner rutas en nuestro archivo, en nuestro archivo único, podemos hacer algo un poco mejor. Primero, voy a comentar esto porque lo usaremos más adelante y voy a registrar un módulo que es realmente muy útil. Que se llama Fastify auto-load. Y necesito decirle qué archivo, qué queremos cargar, de hecho. Así que voy a obtener una utilidad que he preparado que se llama dsm y me dará un método join al que simplemente puedo pasar la URL de este archivo actual que es data1 file:// lo que sea y luego puedo concatenarlo con rutas. Ten en cuenta que si quiero hacer algo diferente, ya sabes, sería una lista larga, larga así que no quiero realmente hacer eso. Así que voy a crear una carpeta de rutas y luego, en la carpeta de rutas, voy a crear un archivo hello.js. En mi archivo hello.js, voy a copiar este bloque aquí. Nuevamente, todavía necesito mi complemento aquí. Así que aquí vamos. Y luego podemos hacer esto. Y luego puedo cerrarlo. Bueno, aquí vamos.

4. Registrando FastifyAutoLoad

Short description:

Registramos FastifyAutoLoad para cargar todas las rutas desde un directorio. Si falla, debe ser una función o una promesa. Cometí un error común con el export default y las rutas. Después de importar el archivo, ahora funciona correctamente.

Básicamente, lo que estamos haciendo aquí, es registrar FastifyAutoLoad, que luego se dirige a un directorio, nuestras rutas, y luego todas esas rutas se cargarán. Entonces veamos, si todo esto todavía funciona, se bloqueará. Por supuesto, se bloquea, debe ser una función o una promesa. Entonces, ¿qué hice mal? Porque eso es típicamente muy común que hago algo mal aquí. Así que tengo mi export default aquí y rutas. Espera, está. Entonces este archivo está aquí, servidor, importar app.js, mi app. Estoy importando mi archivo. Aquí vamos. Y está. De nuevo, oh. Vamos a intentarlo. ¡Yay, okay! Querías un nombre de función. De acuerdo, entonces, aquí vamos, hemos iniciado esto, y ahora todo sigue funcionando bien. De acuerdo.

5. Creando Archivos Adicionales y Escribiendo Pruebas Unitarias

Short description:

Podemos crear abc-d.js y usar Fastify Autoload para cargarlo desde la carpeta abc. Para escribir una prueba unitaria, usamos la utilidad tape, Fastify y nuestra aplicación. Probamos la función hello world usando una función nothing y DEEP equal. Creamos un servidor Fastify, registramos el complemento App y llamamos al servidor usando server.inject. Verificamos la respuesta JSON para el mensaje hello world. Finalmente, cerramos el servidor y ejecutamos la prueba.

Lo que podemos hacer ahora es crear un poco más de cosas. Por ejemplo, puedes crear abc-d.js, por ejemplo. Entonces, en este archivo aquí, puedes ver que hemos creado un poco de una estructura de directorios. Y luego hello from D. Ahora, si vamos aquí y reiniciamos, puedes ver abc-d, oh abc, y luego eso es d.js. Como puedes ver, usando Fastify Autoload, podemos, de hecho, oh, simplemente, ¡Yay! Al usar Fastify Autoload, podemos abrir este archivo y bajar hasta, y cargarlo desde el directorio abc-d, desde la carpeta abc.

Bien, avancemos un paso más. Ahora, ¿qué pasa si quiero escribir una prueba unitaria, por ejemplo? Creemos un nuevo archivo test.js. Ahora, voy a usar una utilidad muy simple, una utilidad muy simple que, aquí vamos. Una utilidad muy simple que en realidad es muy, muy útil, que se llama tape. Soy fan de las herramientas de prueba muy fáciles. Así que no sé, espero que a ti también te gusten pero si no, puedes usar lo que quieras. Así que necesito tape, necesito Fastify, y luego necesitaré mi aplicación. Ten en cuenta que en realidad no estoy creando el servidor sino que estoy cargando mis aplicaciones de una manera separada. Entonces, lo que puedo hacer es, por ejemplo, cargar el hello world. Bueno, puedo probar hello world. Así que quiero probar mi función hello world, así que estoy usando una función nothing aquí y luego estoy usando DEEP equal. Aquí vamos. Y luego podemos crear un servidor, que es mi servidor Fastify y luego podemos registrar. Adivina qué vamos a hacer. Voy a pasar App aquí, que es nuestro complemento Fastify. Así que voy a poner ese complemento en luego lo que necesito, lo que podemos hacer ahora es esperar, podemos llamar a nuestro servidor usando nuestra utilidad interna de testing. Entonces podemos hacer await server.inject y slash, que es nuestra ruta. Y luego podemos hacer deep equal, res json y luego especificar el hecho de que queremos hello world. Aquí vamos. Y luego lo que necesitamos hacer, debemos recordar cerrar nuestro servidor. Así que estamos haciendo esto. Ahora podemos ejecutar la prueba y, oh, ¿dónde puse esto? Prueba. Oh, sí.

6. Creando Rutas Protegidas y Autenticación

Short description:

Si estás usando ESM, recuerda pasar una extensión. Nuestra prueba está pasando y funcionando bien. Agregamos ABCD y probamos ABC. Ahora creamos una carpeta protegida y un archivo index.js. Configuramos el sistema de autenticación importando JWT y registrando el complemento. Agregamos un Decorador para autenticar nuestro sistema usando un bloque try-catch para verificar el token JWT.

Entonces, si estás usando ESM, ¿necesitamos pasar una extensión, verdad? Recuerda eso. De acuerdo. Así que ves que nuestra prueba está pasando. Eso debería ser profundamente equivalente. Así que está funcionando bien. Ahora también podemos agregar una cosa más aquí y sobre ABCD como queríamos, probar ABC. Así que lo que podemos hacer, ABC, y luego hello from D. Y esto debería funcionar igual. De acuerdo.

Hemos agregado algunas cosas. Ahora queremos crear algunos bloques de fraudes que estén protegidos. Entonces, lo que voy a hacer, voy a crear una carpeta llamada protegida y un index.js aquí. Y en este index.js, lo que vamos a hacer es exportar por defecto una función asíncrona, admin, tal vez lo que sea y luego app, que es nuestra aplicación Fastify. Lo que vamos a hacer ahora es aquí, queremos agregar algunas carpetas, algunos puntos finales. Pero antes de eso, necesitamos configurar nuestro sistema de autenticación. Aquí, lo que queremos, es agregar otra importación llamada JWT, por ejemplo, de Fastify.jwt. Entonces, ahora, lo que vamos a hacer, vamos a registrar este complemento y pasarle un secreto. Y lo llamo `cámbiame`. Oye, esto necesita ser cambiado. Ahora estamos agregando esta parte. Vamos a necesitar agregar un par de cosas más, que son bastante, bastante útiles. La primera es Decorator, porque queremos agregar un ayudante de Autenticador. Así que llamamos a decorate y llamamos a esto authenticate, porque así es como vamos a autenticar nuestro sistema. Entonces, esto va a ser otra función asíncrona, que es rec y reply. Estos son objetos de Fastify. Y luego, lo que vamos a hacer, vamos a tener un bonito bloque try-catch y hacer await rec dot JWT verify, que va a verificar nuestro token JWT. Y en caso de un error, solo quiero responder con ese error específico. De acuerdo, eso es muy simple. Ahora podemos cambiar eso si quieres aquí, está bien. Así que hemos agregado esto.

7. Implementando Inicio de Sesión de Usuario y Autenticación

Short description:

Para iniciar sesión, crea un usuario llamado login.js. Usa 'app.post' para manejar la solicitud de inicio de sesión. Autentica la aplicación y valida el nombre de usuario y la contraseña. Lanza un error si las credenciales son incorrectas. Usa JWT para generar un token. Implementa la validación de datos usando Fluent schema. En la ruta protegida, agrega un gancho para autenticar automáticamente todas las rutas.

Ahora, ¿cómo vamos a iniciar sesión? Bueno, para iniciar sesión, voy a crear un usuario llamado login.js aquí. Nuevamente, exporta por defecto una función asíncrona, login app, Hey, luego app dot post porque esto es un post, y luego voy a decir, llama a login, y vamos a necesitar un poco de cosas aquí. Así que dejo este marcador de posición. Entonces vamos a responder directamente, luego necesitamos autenticar nuestra aplicación. Entonces, ooh, lo siento. Yay. Así que llegamos a autenticar nuestra aplicación. Entonces lo que vamos a hacer aquí es que voy a crear, para obtener un nombre de usuario y una contraseña de nuestro cuerpo, y luego voy a hacer, aquí vamos. Si el nombre de usuario es Matteo y la contraseña no es Paulina, vamos, pobre hombre, sistema de autenticación, nunca hagas esto en la vida real. Entonces necesitamos lanzar un nuevo error, necesitamos lanzar un error. Así que voy a hacer un Error de Autorización. Ahora necesitamos este módulo de errores. Esto es Importar Errores de HTTP Errors. Muy útil. Y luego en caso de que solo necesitemos obtener nuestro token. Entonces con JWT, obtienes un token JWT y haces app.jwt.sign y colocamos el nombre de usuario y luego devolvemos el token. Ok, este es nuestro sistema. Ahora necesitamos un poco más porque necesitamos validar un poco más nuestras entradas. Entonces Input S de Fluent schema, aquí vamos. Entonces lo que vamos a hacer aquí ahora es que vamos a abrir el esquema y hacer body s.object y luego .prop y pasar el nombre de usuario, luego esto es una cadena y esto es requerido y lo mismo para la contraseña. Ok, hacemos un poco, un poquito de validación de datos de antemano. Así que también deshabilito esto, también deshabilito esto.

Ahora, lo que necesitamos hacer ahora es tener en nuestra ruta protegida, lo que quiero, quiero tener en nuestro índice aquí, quiero asegurarme de que todas las rutas definidas en este archivo y el archivo que este importa y carga se autentiquen automáticamente. Entonces lo que puedo hacer, puedo agregar un gancho y lo llamaré onRequest. Así que lo estoy agregando al gancho de ciclo de vida onRequest. Esto se llama cada vez que llega una solicitud independientemente de la función. Y vamos a pasar app.authenticate, que es el método que acabamos de agregar. Ahora puedo hacer, por ejemplo, app.get algo como algo y app.slash y simplemente decir, async rec reply. Y solo decir, return está autenticado. Y luego hacer Aquí vamos, ¿de acuerdo? Eso es todo.

8. Pruebas y Agregando Autenticación

Short description:

Para probar si todo funciona, necesitamos enviar una solicitud POST con un cuerpo JSON que contenga el nombre de usuario y la contraseña. La respuesta será un token largo. Luego podemos usar este token como encabezado de autenticación para las rutas protegidas. Además, podemos agregar una prueba para la ruta protegida llamándola después de iniciar sesión con una solicitud POST.

Ahora, necesitamos probar, probar que todo esto funciona, lo cual es, ya sabes, demo-gots. Oye, los demo-gots no están conmigo, como de costumbre. Add no está, oh, ¿dónde puse eso? Add. Bien. Aquí vamos. Así que los demo-gots no están conmigo. Entonces, si hago protected ahora, dice error de no autorizado. Ok. Entonces, para iniciar sesión, aquí vamos. Oye, oye, estoy haciendo trampa. Así que estoy enviando una solicitud POS con un JSON como cuerpo y mi nombre de usuario y contraseña. Ahora la respuesta a esto es un bleep, un largo, largo fragmento de un token. Ok, lo que vamos a hacer es, tomar este token, que en realidad es bastante útil, y luego pasarlo como authentication, a la authentication. Entonces lo que vamos a hacer, vamos a decir h-header, que es, autorización, es autorización para, hey, ok, autorización. Así que vamos a cambiar esto. Para no arruinarlo. Ya he arruinado bastante durante esta charla, básicamente. Aquí vamos. Y luego protected. Con suerte, todo esto funcionaría. Estos están autenticados. Ok.

Ahora, esto es realmente interesante, porque lo que podemos hacer es, también podemos agregar una prueba para este código. Entonces, para agregar una prueba para esta ruta, lo que podemos hacer es protected. Aquí vamos. Entonces, lo que podemos hacer, podemos hacer algo muy similar a lo que estábamos haciendo antes. Y espero. Y llamar a protected. Ahora, primero necesitamos llamar a login. Entonces, primero llamamos a login, pero necesitamos llamarlo como POST.

9. Llamando a la Ruta Protegida

Short description:

Tenemos una URL y el método debe ser POST. Especifica el cuerpo con el nombre de usuario y la contraseña. Llama al token y ciérralo. Llama a JSON para obtener el token. Llama a la URL protegida con el token. Verifica si funciona. Autentica y autoriza.

Entonces, tenemos esta URL. Y luego el método debe ser POST. Aquí vamos. Eso es todo. Y necesitamos especificar un cuerpo. Y necesitamos decir que el nombre de usuario, el nombre de usuario es Matteo, y la contraseña es Alena. Aquí vamos, lo cual es bastante útil.

Y luego lo que quiero hacer es esto. Quiero llamar a este token porque ese es nuestro token JWT. Luego cierro esto, llamo a JSON. Así que obtengo mi token. Ahora puedo llamar, aquí vamos. Sí. Y voy a entrar aquí. Y la URL. Aquí vamos. Protegido. Y luego necesito especificar otro. Ten en cuenta que es bastante importante... Sí. Y luego especificamos nuestro token. Aquí vamos. Y luego es... Choo-choo.

Ahora veamos si todo esto funciona. Oh, esto es autenticación. Solo un segundo. Oh, autorización.

10. Finishing the Demo and Contact Information

Short description:

Token de autorización portador. Esto está autenticado. Fastify se puede utilizar para construir aplicaciones rápidamente utilizando Fastify JWT, decoradores y métodos del ciclo de vida. Lanzamientos de Fastify 3, NodeV14 y soporte nativo de ESM. Echa un vistazo a la aplicación en la URL proporcionada. Contáctame si tienes alguna pregunta.

Lo siento. Autorización. Aquí vamos. Así que esto está funcionando realmente. El formato es token de autorización portador. Portador token. Interesante.

De acuerdo. Así que solo, solo un momento, amigos. Y esto no está funcionando como debería. Token de portador. Así que aquí vamos. Lo siento, necesito entender por qué esto no está funcionando. Y este es el problema, ya sabes, aquí vamos.

De acuerdo, ahora esto es, aquí vamos, RESTBODY. Aquí estamos. Sí, esto está autenticado. Entonces lo que vamos a hacer es llamar a deep equal. Esto está autenticado. Aquí vamos. De acuerdo, solo quería terminar esta demostración, de esta larga demostración diciendo que nuestro servidor Fastify es, Fastify se puede utilizar para construir aplicaciones muy rápidamente utilizando una combinación de varias utilidades, como por ejemplo, Fastify JWT, los decoradores y los métodos del ciclo de vida de Fastify. Ten en cuenta que actualmente estoy utilizando algunas, todo esto está utilizando cosas de última generación. Así que los nuevos lanzamientos de Fastify 3, NodeV14 y el nuevo soporte nativo de ESM. Así que esto no está en Spyle, simplemente se está ejecutando en ESM nativo y se ve bastante fresco para ser visto. Solo quería señalar que esta es la URL donde este sistema, esta aplicación va a, este código va a vivir. Así que si puedes echarle un vistazo y jugar con él si quieres. El sitio web de Fastify es www.fastify.io. Así que puedes buscarlo en NPM y también en Google. Si tienes alguna pregunta sobre Node.js, por favor contáctame en Matteo Colina en Twitter o matteo.colina en nearfun.com y gracias a todos. A todos.

11. Inspiration and Community Ownership

Short description:

Fastify se inspiró en la necesidad de un nuevo marco web para Node.js que combine buenas características de rendimiento en producción y una buena experiencia para los desarrolladores. Su objetivo es resolver una cierta clase de problemas y está construido teniendo en cuenta la propiedad de la comunidad y la contribución abierta. El lema de Fastify es 'cuando alguien informa un error, ¿te gustaría enviar una solicitud de extracción para solucionarlo?'

¡Hola, Matteo, cómo va todo? Muy bien, muy bien. Ha sido genial. Esa fue una demostración increíble sobre la velocidad de Fastify. ¿Sabes? Bueno, tú sabes. Nuestros asistentes parecen estar de acuerdo porque tenemos muchas preguntas llegando. Pero, obviamente, al ser una demostración, quería que volvieras atrás y te centraras en lo que te inspiró al principio, a ti y a Thomas DeLiverdove en 2016, para decir, sabes qué, vamos a construir esta cosa llamada Fastify. ¿Cómo surgió eso? Ese es realmente uno de los grandes puntos de partida. Así que al principio, pensé, bueno, creo que hay espacio para un nuevo marco web para Node.js porque estaba teniendo algunos problemas con Express, Appie, Restify. Todos tenían ciertas cosas que no funcionaban bien en producción para algunas de las empresas con las que trabajaba. Así que pensé, bueno, tal vez haya un espacio en la industria para algo que combine buenas características de rendimiento en producción y una buena experiencia para los desarrolladores al mismo tiempo. Y necesitaba resolver una cierta clase de problemas que Fastify terminó resolviendo. Sin embargo, al principio, pensé, bueno, escribir y mantener un nuevo marco web es una tarea enorme, ¿vale? Es realmente mucho trabajo. Y no lo voy a hacer a menos que pueda encontrar a otra persona para empezar a hacer esto al principio, para empezar a hacer esto juntos. Y si puedo convencer a alguien más de que esta es una buena idea entonces probablemente tengamos una oportunidad. Si no puedo, porque no hay forma de que pueda hacer todo eso solo. Así que básicamente partí del punto de vista de que esto es algo que va a ser propiedad de la comunidad o la comunidad tendrá voz en cómo se construyen todas estas cosas y cómo se mantiene esto. Y por eso tiene una política de contribución abierta desde el principio y cosas así. Y está completamente basado en una gobernanza abierta y muchas de esas cosas. Así que, en esencia, está realmente enfocado en obtener una muy buena experiencia para los colaboradores así como para los usuarios porque los usuarios son los colaboradores en esencia. El lema típico de Fastify es, bueno, cuando alguien informa un error ¿te gustaría enviar una solicitud de extracción para solucionarlo? Porque todos deberían mantenerlo. El mantenimiento es responsabilidad de todos los usuarios en esencia.

12. Características Únicas de Fastify

Short description:

Fastify se diferencia de otros frameworks al admitir completamente Async Await y las últimas características de JavaScript. También proporciona un excelente soporte para el ESM nativo de Node en Fastify v3. A diferencia de otros frameworks, Fastify sigue un patrón basado en ciclos de vida en lugar de un estricto patrón de middleware. Esto permite una mayor flexibilidad en el manejo de rutas y reduce la sobrecarga al activar solo los hooks necesarios.

Muy bien, muy bien. Y luego, con la gran cantidad de frameworks dentro del ecosistema de JavaScript. Solo tenía curiosidad por saber un poco sobre lo que hace que Fastify sea único y destaque en comparación con el resto de ellos. ¿Perdón, puedes repetir? ¿En qué se diferencia Fastify de los otros... Vale, hay algunas cosas, vale. Primero que nada, toma varias partes de la mayoría de los frameworks, vale. En primer lugar, admite completamente Async Await en comparación, por ejemplo, con Express 4. Sé que Express 5 va a admitir Async Await pero aún está en versión alfa o algo así. Y, en primer lugar, admite Async Await y todas las últimas características. También estamos agregando, como he demostrado, el nuevo Fastify v3 agrega un excelente soporte para ESM, para el ESM nativo de Node que se puede usar con Node 14 y 12.18, lo cual es genial. Por lo tanto, estamos muy interesados en adoptar lo último y lo mejor de la especificación de javascript. Sin embargo, no seguimos un estricto patrón de middleware. Seguimos un patrón basado en ciclos de vida. Lo que significa que hay hooks que se activan en cualquier punto de las etapas en las que llega la solicitud y en varias partes donde puedes inyectar código, pero si no estás inyectando código, estas cosas no se activan, lo cual es realmente poderoso porque podemos, una de las cosas clave, uno de los problemas clave, por ejemplo, al escribir una gran aplicación Express es que tienes muchos middlewares donde haces if esta ruta haz esto, y luego si no, llama a next, y luego los acumulas uno tras otro. Con fastify puedes evitar todo eso al tener este tipo de ciclo de vida y puedes establecer esos métodos de ciclo de vida solo para una clase de rutas o solo para algunas rutas específicas, lo cual es una de las mejores formas de estructurar una aplicación, y eso también causa la mínima sobrecarga porque esas cosas solo se activan para las rutas que las requieren esencialmente.

QnA

Preferencia de IDE de Matteo

Short description:

Soy un gran fanático de Vim y T-Max. Recientemente cambié a la distribución de Vim Space. Es ligeramente diferente de la configuración de Vim que estaba usando antes.

Genial, y tenemos una pregunta de Michael Zielenski en la audiencia. Quería saber qué IDE usa Mateo. Soy un gran fanático de Vim y T-Max, he estado usando Vim y T-Max durante los últimos 10 años, tal vez 11, 12, algo así. Recientemente cambié a la distribución de Vim Space. Lo estuve probando y lo he estado usando durante algunas semanas ahora, y es algo interesante, para ser honesto. Me gusta. Es ligeramente diferente de la configuración de Vim que estaba usando antes. Quería probar algo un poco más moderno.

Comida reconfortante de Matteo y Conclusión

Short description:

Matteo estará disponible en una sala de Zoom para responder todas las preguntas. Su comida reconfortante es la pizza, específicamente la pizza italiana. Él enfatiza la diferencia entre la pizza italiana y otras variaciones, especialmente aquellas con piña. Matteo expresa gratitud por la oportunidad de compartir su conocimiento y espera responder más preguntas técnicas. La discusión abarcó el desarrollo de JavaScript en el lado del servidor, el ecosistema de JavaScript y la pizza.

Y solo porque no tenemos mucho tiempo, lo cual es muy, muy desafortunado, quería hacerles saber a todos los que están sintonizando que Matteo no se va a ninguna parte. Estará en una sala de Zoom, por lo que todas las preguntas que todos están haciendo también se responderán en la sala de Zoom. Quería terminar antes de eso siendo, esta es una discusión relacionada con un pseudo chef. Quería saber cuál es tu comida reconfortante.

Bueno, mi comida reconfortante es la pizza. Y por cierto, soy italiano. Ok, así que estoy hablando de pizza italiana. La pizza es una especie de religión aquí. Así que no confundamos lo que puedes comer fuera de Italia con lo que comes en Italia. Y es muy importante que esté hablando de pizza italiana. Ahora puedes conseguir muy buena pizza italiana en muchos otros lugares del mundo. La mayoría de las veces, sin embargo, solo estás obteniendo algo que, ya sabes, es solo otro tipo de plato que se llama pizza. No, no me refiero a eso, ok. Y también si tiene piña, definitivamente no es una pizza italiana. Pero si consigues una muy buena pizza italiana, eso es lo que yo llamaría. Eso es como mi comida reconfortante. También es una bomba de carbohidratos que va a ir directo a mi barriga. Así que eso es más o menos, eso es más o menos.

Definitivamente. Bueno, en este punto, me gustaría agradecer a Matteo por su tiempo esta tarde por compartir su conocimiento en Fastify. Como mencioné, chicos, él no se va a ninguna parte. Simplemente estará en su sala de Zoom para responder todas las preguntas que se hayan hecho. Y son bastantes ya que estás hablando de pizza, la lista simplemente seguía creciendo en términos de cosas más técnicas. Así que estará disponible para responder esas también. Y por favor, sigan enviando esas preguntas. Matteo, ha sido un placer hablar contigo. Siento que he aprendido mucho más sobre el desarrollo de JavaScript en el lado del servidor, el ecosistema de JavaScript y la pizza. Y estoy seguro de que volveremos a hablar. Claro. Adiós.

Despedida

Short description:

Adiós. Adiós. Adiós. Adiós. Adiós. Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Adiós.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Building Better Websites with Remix
Top Content
Remix is a new web framework from the creators of React Router that helps you build better, faster websites through a solid understanding of web fundamentals. Remix takes care of the heavy lifting like server rendering, code splitting, prefetching, and navigation and leaves you with the fun part: building something awesome!
React Summit 2023React Summit 2023
32 min
Speeding Up Your React App With Less JavaScript
Too much JavaScript is getting you down? New frameworks promising no JavaScript look interesting, but you have an existing React application to maintain. What if Qwik React is your answer for faster applications startup and better user experience? Qwik React allows you to easily turn your React application into a collection of islands, which can be SSRed and delayed hydrated, and in some instances, hydration skipped altogether. And all of this in an incremental way without a rewrite.
JSNation 2022JSNation 2022
28 min
Full Stack Documentation
Top Content
Interactive web-based tutorials have become a staple of front end frameworks, and it's easy to see why — developers love being able to try out new tools without the hassle of installing packages or cloning repos.But in the age of full stack meta-frameworks like Next, Remix and SvelteKit, these tutorials only go so far. In this talk, we'll look at how we on the Svelte team are using cutting edge web technology to rethink how we teach each other the tools of our trade.
GraphQL Galaxy 2021GraphQL Galaxy 2021
32 min
From GraphQL Zero to GraphQL Hero with RedwoodJS
Top Content
We all love GraphQL, but it can be daunting to get a server up and running and keep your code organized, maintainable, and testable over the long term. No more! Come watch as I go from an empty directory to a fully fledged GraphQL API in minutes flat. Plus, see how easy it is to use and create directives to clean up your code even more. You're gonna love GraphQL even more once you make things Redwood Easy!
JSNation 2023JSNation 2023
28 min
SolidJS: Why All the Suspense?
Solid caught the eye of the frontend community by re-popularizing reactive programming with its compelling use of Signals to render without re-renders. We've seen them adopted in the past year in everything from Preact to Angular. Signals offer a powerful set of primitives that ensure that your UI is in sync with your state independent of components. A universal language for the frontend user interface.
But what about Async? How do we manage to orchestrate data loading and mutation, server rendering, and streaming? Ryan Carniato, creator of SolidJS, takes a look at a different primitive. One that is often misunderstood but is as powerful in its use. Join him as he shows what all the Suspense is about.
React Summit Remote Edition 2021React Summit Remote Edition 2021
43 min
RedwoodJS: The Full-Stack React App Framework of Your Dreams
Top Content
Tired of rebuilding your React-based web framework from scratch for every new project? You're in luck! RedwoodJS is a full-stack web application framework (think Rails but for JS/TS devs) based on React, Apollo GraphQL, and Prisma 2. We do the heavy integration work so you don't have to. We also beautifully integrate Jest and Storybook, and offer built-in solutions for declarative data fetching, authentication, pre-rendering, logging, a11y, and tons more. Deploy to Netlify, Vercel, or go oldschool on AWS or bare metal. In this talk you'll learn about the RedwoodJS architecture, see core features in action, and walk away with a sense of wonder and awe in your heart.

Workshops on related topic

JSNation 2023JSNation 2023
170 min
Building WebApps That Light Up the Internet with QwikCity
Featured WorkshopFree
Building instant-on web applications at scale have been elusive. Real-world sites need tracking, analytics, and complex user interfaces and interactions. We always start with the best intentions but end up with a less-than-ideal site.
QwikCity is a new meta-framework that allows you to build large-scale applications with constant startup-up performance. We will look at how to build a QwikCity application and what makes it unique. The workshop will show you how to set up a QwikCitp project. How routing works with layout. The demo application will fetch data and present it to the user in an editable form. And finally, how one can use authentication. All of the basic parts for any large-scale applications.
Along the way, we will also look at what makes Qwik unique, and how resumability enables constant startup performance no matter the application complexity.
React Summit 2023React Summit 2023
106 min
Back to the Roots With Remix
Featured Workshop
The modern web would be different without rich client-side applications supported by powerful frameworks: React, Angular, Vue, Lit, and many others. These frameworks rely on client-side JavaScript, which is their core. However, there are other approaches to rendering. One of them (quite old, by the way) is server-side rendering entirely without JavaScript. Let's find out if this is a good idea and how Remix can help us with it?
Prerequisites- Good understanding of JavaScript or TypeScript- It would help to have experience with React, Redux, Node.js and writing FrontEnd and BackEnd applications- Preinstall Node.js, npm- We prefer to use VSCode, but also cloud IDEs such as codesandbox (other IDEs are also ok)
JSNation 2023JSNation 2023
104 min
Build and Deploy a Backend With Fastify & Platformatic
WorkshopFree
Platformatic allows you to rapidly develop GraphQL and REST APIs with minimal effort. The best part is that it also allows you to unleash the full potential of Node.js and Fastify whenever you need to. You can fully customise a Platformatic application by writing your own additional features and plugins. In the workshop, we’ll cover both our Open Source modules and our Cloud offering:- Platformatic OSS (open-source software) — Tools and libraries for rapidly building robust applications with Node.js (https://oss.platformatic.dev/).- Platformatic Cloud (currently in beta) — Our hosting platform that includes features such as preview apps, built-in metrics and integration with your Git flow (https://platformatic.dev/). 
In this workshop you'll learn how to develop APIs with Fastify and deploy them to the Platformatic Cloud.
Node Congress 2022Node Congress 2022
152 min
Fastify Workshop
Workshop
Fastify is an HTTP framework for Node.js that focuses on providing a good developer experience without compromising on performance metrics. What makes Fastify special are not its technical details, but its community which is wide open for contributions of any kind. Part of the secret sauce is Fastify plugin architecture that enabled developers to write more than a hundred plugins. This hands-on workshop is structured around a series of exercises that covers from basics "hello world", to how to structure a project, perform database access and authentication.
Node Congress 2021Node Congress 2021
128 min
Learn Fastify One Plugin at a Time
Workshop
Fastify is an HTTP framework for Node.js that focuses on providing a good developer experience without compromising on performance metrics. What makes Fastify special are not its technical details, but its community which is wide open for contributions of any kind. Part of the secret sauce is Fastify plugin architecture that enabled developers to write more than a hundred plugins.This hands-on workshop is structured around a series of exercises that covers from basics "hello world", to how to structure a project, perform database access and authentication.

https://github.com/nearform/the-fastify-workshop
JSNation 2023JSNation 2023
66 min
Build a Universal Reactive Data Library with Starbeam
WorkshopFree
This session will focus on Starbeam's universal building blocks. We'll use Starbeam to build a data library that works in multiple frameworks.We'll write a library that caches and updates data, and supports relationships, sorting and filtering.Rather than fetching data directly, it will work with asynchronously fetched data, including data fetched after initial render. Data fetched and updated through web sockets will also work well.All of these features will be reactive, of course.Imagine you filter your data by its title, and then you update the title of a record to match the filter: any output relying on the filtered data will update to reflect the updated filter.In 90 minutes, you'll build an awesome reactive data library and learn a powerful new tool for building reactive systems. The best part: the library works in any framework, even though you don't think about (or depend on) any framework when you built it.
Table of contents- Storing a Fetched Record in a Cell- Storing multiple records in a reactive Map- Reactive iteration is normal iteration- Reactive filtering is normal filtering- Fetching more records and updating the Map- Reactive sorting is normal sorting (is this getting a bit repetitive?)- Modelling cache invalidation as data- Bonus: reactive relationships