Comment se mettre au travail avec Fastify

https://www.fastify.io/
Infrastructure Web rapide et peu onéreuse, pour Node.js

Fastify version 1 est sorti le 7 mars. Cet article vous montrera comment le configurer et discutera des incroyables fonctionnalités offertes par Fastify. Aucune configuration n'est nécessaire - la base de code de Fastify sera exécutée sur les versions de nœud 6.x, 8.x et 9.x.

Prêt?

Commencez par npm i fastify puis:

const fastify = require ('fastify') ()
fastify.get ('/', (demande, réponse) => {
  reply.send ({hello: 'world'})
})
fastify.listen (3000, err => {
  si (err) {
    fastify.log.error (err)
    process.exit (1)
  }
  fastify.log.info (
    `le serveur écoute sur $ {fastify.server.address (). port}`
  )
})

Maintenant, lancez votre serveur avec: serveur de noeud

Ça y est! Votre premier serveur Fastify est opérationnel.

Que se passe t-il ici?

const fastify = require ('fastify') ()

Line 1 importe le framework Fastify dans le projet JavaScript et l'instancie. Votre instance de serveur est maintenant stockée dans la variable fastify. Vous pouvez passer des options supplémentaires à cette ligne comme ceci:

const fastifyWithOptions = require ('fastify') ({
  enregistreur: {
    prettyPrint: true
  }
})

Propulsé par le logger Pino, cette option rend la sortie de la console facile à lire et colorée. Consultez la documentation Pino pour plus d'options de consignateur et la documentation Fastify pour plus d'options d'instance Fastify.

Prochaine étape: le routage

fastify.get ('/', (demande, réponse) => {
  reply.send ({hello: 'world'})
})

Les lignes 3 à 5 définissent un itinéraire très basique. Les itinéraires constituent le cœur de tout serveur principal Node.js. Fastify prend en charge deux méthodes de définition des itinéraires: la méthode abrégée utilisée ci-dessus ou une méthode générale .route, comme indiqué ci-dessous.

fastify.route ({
  méthode: 'GET',
  url: '/',
  gestionnaire: fonction (demande, réponse) {
    reply.send ({hello: 'world'})
  }
})

Ces deux implémentations font exactement la même chose et ont les mêmes performances. Utilisez donc celui qui vous convient le mieux.

La déclaration de route a beaucoup plus d’options disponibles qui ne sont pas affichées ici.

  • Fournissez un schéma JSON pour les objets requête et réponse, ce qui peut augmenter le débit de 10 à 20%.
  • Définissez une méthode beforeHandler appelée juste avant la fonction de gestionnaire. C'est excellent pour l'authentification, et je montre comment l'utiliser dans mon plugin JWT Auth (plus sur les plugins Fastify plus tard).

Démarrez vos moteurs! 3… 2… 1… GO!

fastify.listen (3000, err => {
  si (err) {
    fastify.log.error (err)
    process.exit (1)
  }
  fastify.log.info (
    `le serveur écoute sur $ {fastify.server.address (). port}`
  )
})

Enfin, démarrez l’instance Fastify sur le port localhost 3000. Il s’agit de la dernière étape requise pour créer votre propre instance Fastify. En interne, cette méthode attendra .ready () (appelée après le chargement des plugins). Aucune nouvelle route ne peut être définie après avoir appelé la méthode .listen ().

Et après? Plugins!

Une des meilleures fonctionnalités de Fastify est la facilité avec laquelle il est possible d’écrire et d’incorporer des plugins dans une instance de serveur. Pour commencer, définissez une fonction:

fonction superPlugin (fastify, opts, next) {
  fastify.decorate ('superMethod', () => {
    console.log (`Code secret: $ {opts.secretCode}`)
  })
  suivant()
}

Maintenant, en utilisant le module fastify-plugin, exportez votre nouveau plugin.

const fp = require ('fastify-plugin')
module.exports = fp (superPlugin, {
  fastify: '> = 1.0.0',
  nom: 'super-plugin'
})

Enfin, enregistrez votre plugin sur votre instance Fastify:

/ * À l'intérieur du fichier principal server.js * /
const superPlugin = require ('super-plugin')
fastify.register (superPlugin, {
  secretCode: 'JavaScript est génial!'
})

Vous pouvez maintenant appeler le superMethod partout où vous avez accès à votre instance Fastify.

/ * server.js * /
fastify.listen (3000, err => {
  fastify.superMethod ()
})

Remarque: vous pouvez enregistrer des plugins au sein d’autres plugins, ce qui verrouille la portée de ce plugin enfant au plugin parent uniquement. Ce sujet est trop avancé pour cet article, je ne le traiterai donc plus en détail. Vous pouvez en savoir plus sur les plugins Fastify ici. Découvrez les exemples de fichiers complets dans un gistub Github ici.

Aller de l'avant et conquérir

Fastify est rapide. Vraiment très rapide

Fastify Benchmarks v1.1.x

Après cette brève introduction, je vous encourage à découvrir tout ce que Fastify a à offrir. Si vous aimez la programmation open source, Fastify est également un excellent projet. Il existe également un grand écosystème de plugins à découvrir et à quoi contribuer!

Continuez votre excellent travail ~ Ethan Arrowood