DEV Community

Uriel dos Santos Souza
Uriel dos Santos Souza

Posted on

3 2

Usando Fastify no lugar do Express

Todo novo desenvolvedor que entra no mundo NODE(gosto de dizer mundo, pq o node é muita coisa) aprende logo de inicio a instalar o servidor(que estende o padrão do Node) expressJS.

Express é ótimo.
Express tem boa documentação
Express tem muito material de tutoriais.
Express tem muita pergunta no stackoverflow(isso é importante)

Tudo em node(relacionado a API e sites) muitos materiais com express.

Se você procurar no google por expressjs vai ter como resposta mais de 3 milhões de resultados

Expressjs esta em tudo.

Mas eu vim aqui para passar a palavra do Fastify

Fastify é um servidor web(que estende o servidor padrão do node)
Em miúdos. Ele faz exatamente a mesma coisa que o express.

Só que mais rápido(segundo os devs do fastify).

Além de usar a arquitetura de middleware(caso você sinta saudades do express)

Isso não é uma comparação de qual é o melhor!
Nada disso. É apenas mostrar uma alternativa!
Fastify É inspirado no Hapi e no Express.

Eu gostei dele pela velocidade(no que eu precisei)
E este é o mote de propaganda dele. Velocidade! Tem os testes no site deles.

Gostei do uso de schema(são meio chato de fazer, mas muito bons depois :). Te ajuda muito.

Basta criar um arquivo de nome qualquer
colar o código abaixo e mandar rodar.

estes códigos são do site oficial do fastify


// Require the framework and instantiate it
const fastify = require('fastify')({ logger: true })

// Declare a route
fastify.get('/', async (request, reply) => {
  return { hello: 'world' }
})

// Run the server!
const start = async () => {
  try {
    await fastify.listen(3000)
  } catch (err) {
    fastify.log.error(err)
    process.exit(1)
  }
}
start()
Enter fullscreen mode Exit fullscreen mode

Pronto, já pode testar a /.

Agora vamos por validações com schema


const fastify = require('fastify')({ logger: true })

fastify.route({
  method: 'GET',
  url: '/',
  schema: {
    // request needs to have a querystring with a `name` parameter
    querystring: {
      name: { type: 'string' }
    },
    // the response needs to be an object with an `hello` property of type 'string'
    response: {
      200: {
        type: 'object',
        properties: {
          hello: { type: 'string' }
        }
      }
    }
  },
  // this function is executed for every request before the handler is executed
  preHandler: async (request, reply) => {
    // E.g. check authentication
  },
  handler: async (request, reply) => {
    return { hello: 'world' }
  }
})

const start = async () => {
  try {
    await fastify.listen(3000)
  } catch (err) {
    fastify.log.error(err)
    process.exit(1)
  }
}
start()

Enter fullscreen mode Exit fullscreen mode

Mas não é só isso!
Fastify é todo assíncrono!
Tem ganchos que ajudam muito.
Você pode validar algo antes de chegar a qualquer rota. Parecido com o use do Express.
Declarando rotas com array.



const routes = [{
        method: 'GET',
        url: '/api/qualquercoisa',
        preHandler:[pre1, pre2, pre3],
        OutroHook:[outro,outro],
        schema: seuSchema
        handler:seuHandler
    },

]
module.exports = minharota

Enter fullscreen mode Exit fullscreen mode

Isso é só o começo!


const blogRoutes = require('./routes/minharota')
minhasrotas.forEach((route, index) => {
    app.route(route)
})

Enter fullscreen mode Exit fullscreen mode

Criando um plugin!


module.exports = function (fastify, opts, done) {
  fastify.decorate('utility', () => {})

  fastify.get('/', handler)

  done()
}
Enter fullscreen mode Exit fullscreen mode

Tem muito mais plugins prontinhos pra você usar!

De resto é muito parecido com outros servidores!

Quero em breve postar mais algumas coisas sobre o fastify!

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more