Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Zoranildo Santos
Zoranildo Santos

Posted on

     

API Node Desacoplada: Criando servers com express e fastify

Neste artigo vamos criar os dois servidores, um com express e outro com fastify e deixar pronto para alternar entre um e outro mudando apenas o valor de uma variável.

Para dar continuidade ao projeto, vamos criar uma pastasrc na raiz do projeto e outra pasta chamadainfra dentro desrc. Dentro deinfra vamos criar uma pastaports e dentro deports mais duas pastaexpress efastify. A estrutura de pastas devera ficar como o exemplo abaixo:

estrutura de pastas

Antes de seguir vamos instalar algumas bibliotecas comodependencies:

yarn add dotenv express fastify
Enter fullscreen modeExit fullscreen mode

e outra comodevDependencies

yarn add @types/express-D
Enter fullscreen modeExit fullscreen mode

dotenv: pacote utilizado em projetos Node.js para carregar variáveis de ambiente de arquivos.env. Ele é especialmente útil para gerenciar configurações sensíveis e variáveis que podem variar de ambiente para ambiente (por exemplo, desenvolvimento, teste e produção) sem a necessidade de codificar essas informações diretamente no código.

express: framework para aplicativo da web do Node.js mínimo e flexível que fornece um conjunto robusto de recursos.

fastify: é uma estrutura da Web altamente focada em fornecer a melhor experiência de desenvolvimento com o mínimo de sobrecarga e uma poderosa arquitetura de plug-in. É inspirado no Hapi e no Express.

@types/express: adiciona tipagem estática ao express, o que permite ao TypeScript verificar tipos em tempo de compilação. Com isso, erros relacionados a tipos são detectados antecipadamente, evitando problemas em tempo de execução.

Criando o server express

Dentro da pastaexpress vamos criar um arquivoindex.ts e colocar o seguinte código:

import'dotenv/config'importexpressfrom'express'// dotenv/config: usado para carregar as variáveis de ambiente do arquivo .env.// express: módulo do express para criar o servidor web e tratar// as rotas e requisições HTTP.constPORT=5000// define a porta na qual o servidor Express irá escutar as// requisições HTTPconstapp=express()// Aqui, uma instância do servidor Express é criada e armazenada// na variável app. Essa instância será responsável por gerenciar// as rotas, as requisições e as respostas.app.listen(PORT,()=>{console.log(`Express app listening on port${PORT}`)})// app.listen(...): Essa função é usada para iniciar o servidor// Express e fazê-lo começar a ouvir as requisições HTTP na porta// especificada. Quando uma requisição é recebida na porta// especificada, o Express cuida de roteá-la para o handler// apropriado.// O console.log exibe uma mensagem indicando que o servidor// Express foi iniciado e está ouvindo na porta 5000.export{app}// O objeto app é exportado para que possa ser utilizado em outros// módulos da aplicação. Isso permite que outros arquivos acessem// o servidor Express e adicionem rotas ou funcionalidades// adicionais, se necessário.
Enter fullscreen modeExit fullscreen mode

Agora vamos criar dentro da pastasrc um arquivo chamadoserver.ts e importar a instância do express:

constexpress='./infra/ports/express'require(express)
Enter fullscreen modeExit fullscreen mode

No arquivopackage.json vamos criar um script pra subir o servidor, pra esse fim vamos usar a biblioteca tsx que executará os arquivos.ts em modo de observação(watch):

"scripts":{"start:dev":"tsx watch src/server.ts"},
Enter fullscreen modeExit fullscreen mode

O arquivopackage.json atualizado ficará assim:

{"name":"dev-to","version":"1.0.0","main":"index.js","license":"MIT","scripts":{"start:dev":"tsx watch src/server.ts"},"devDependencies":{"@types/express":"^4.17.17","@types/node":"^20.4.5","tsup":"^7.1.0","tsx":"^3.12.7","typescript":"^5.1.6"},"dependencies":{"dotenv":"^16.3.1","express":"^4.18.2","fastify":"^4.20.0"}}
Enter fullscreen modeExit fullscreen mode

Terminado esse trabalho execute o comandoyarn start:dev no terminal pra subir a aplicação, que deverá ter a seguinte saída caso ocorra tudo como esperado:

servidor express em execução

Crindo o server com fastify

Dentro da pastafastify vamos criar um arquivoindex.ts e colocar o seguinte código:

import'dotenv/config'importfastifyfrom'fastify'// dotenv/config: usado para carregar as variáveis de ambiente do arquivo .env.// fastify: módulo do Fastify utilizado para criar o servidor web e tratar as rotas e requisições HTTP.constserver=fastify({logger:true})// Aqui, uma instância do servidor Fastify é criada com a opção// logger: true. Isso habilita o registro de logs para as// requisições recebidas pelo servidor, o que pode ser útil para// depuração e monitoramento.constapp=async()=>{// O código define uma função assíncrona chamada app. Essa função// será responsável por iniciar o servidor Fastify e ouvir as// requisições.try{server.listen({host:'0.0.0.0',port:process.env.PORT_SERVER?Number(process.env.PORT_SERVER):5000,})console.log(`Server fastify running in port${5000}`)}catch(error){console.error(`Erro server fastify`,error)}}// O bloco try...catch é usado para lidar com qualquer exceção que// possa ocorrer durante o processo de inicialização do servidor.// server.listen(...): Essa função é usada para iniciar o servidor// e começar a ouvir as requisições HTTP. Ela recebe um objeto de// opções como argumento. Neste caso, o servidor está configurado// para escutar em todas as interfaces de rede (0.0.0.0) e na// porta definida numa variável de ambiente chamada PORT_SERVER.// Se essa variável não estiver definida, o servidor usará a porta// 5000 por padrão.// O console.log exibe uma mensagem indicando que o servidor// Fastify foi iniciado e está ouvindo na porta 5000.// Se algum erro ocorrer durante a inicialização do servidor, o// bloco catch será acionado e exibirá uma mensagem de erro no// console.app()
Enter fullscreen modeExit fullscreen mode

Crie um arquivo.env na raiz do projeto e coloque o código abaixo:

SERVER_TYPE=// Os valores são express ou fastifyPORT_SERVER=5000
Enter fullscreen modeExit fullscreen mode

O próximo passo é atualizar o arquivoserver.ts pra subir o servidor de acordo com o valor da variável de ambienteSERVER_TYPE fornecida no arquivo.env. Com a alteração o arquivo ficará como apresentado abaixo:

import'dotenv/config'constexpress='./infra/ports/express'constfastify='./infra/ports/fastify'constserver=process.env.SERVER_TYPE==='fastify'?fastify:expressrequire(server)
Enter fullscreen modeExit fullscreen mode

Agora você pode alternar entre express e fastify alterando o valor da variávelSERVER_TYPE. Ao escolher o fastify a saída no terminal deverá ser assim:

excutando servidor fastify

Aqui chega ao fim o segundo artigo da série. Qualquer dúvida deixe nos comentários que terei o prazer de responder.

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

I am a experienced software developer. I really enjoy learning about new techniques and technologies.
  • Work
    Software Engineer
  • Joined

More fromZoranildo Santos

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp