Recentemente me propus um desafio novo, construir um boilerplate de uma API em NodeJS usando TypeScript como parte de uma demanda do meu setor.
Por ter uma boa experiência com Angular, alinhado com a necessidade de criar uma API que fosse de fácil acesso à desenvolvedores frontend que já mexiam com TypeScript. Conversando em um canal no Telegram um amigo me falou sobre o AdonisJS em sua versão 5.
Foi amor a primeira vista.
Vejamos o que diz a página deles sobre o framework
O AdonisJS é uma estrutura MVC completa para o Node.js. Ele cuida da maioria dos problemas de desenvolvimento da Web, oferecendo uma API limpa e estável para criar aplicativos da Web ou microsserviços.
Tão direto ao ponto quanto parece ser. E a partir dai eu enxerguei no framework a solução para todos os meus gargalos! Ao ler esse artigo, assumo que já tenha noções básicas sobre o framework e já tenha uma aplicação criada. Até a publicação desese artigo, ainda não temos socket nativamente com o AdonisJS, e esses foi um dos fatores para escolhermos o socket.io como uma solução. Então vamos direto ao ponto!
Assumindo que você já tem uma instalação AdonisJS, vamos precisar de 3 pacotes
npm install socket.io @types/socket.io socketio-jwt
O primeiro é o próprio socket.io, o segundo é uma abstração da ferramenta para TypeScript e o terceiro é uma integração com a ferramenta de autenticação de token de acesso JWT.
- Dentro da pasta
start
na raiz do nosso diretório criaremos um arquivo chamadosocket.ts
- No arquivo
.adonisrc.json
na raiz do nosso projeto iremos adicionar na chavepreloads
o caminho desse arquivo./start/socket
Isso fará com que a nossa API execute automaticamente o socket quando ela iniciar.
const app = require('express')() // Importa o express lidar com a conexão
const socketioJwt = require('socketio-jwt') // Importa o SocketioJWT para utilizarmos auth nos sockets
const server = require('http').Server(app) // Monta o servidor HTTP do Express
const io = require('socket.io')(server) // Atrela o servidor HTTP ao socketio
const dotenv = require('dotenv').config().parsed // Aqui é só um pacote pra importar infos do .env facilmente
// Cria um "middleware" com JWT para validar a autorização do socket
io.use(socketioJwt.authorize({
secret: dotenv.JWT_SECRET,
handshake: true,
}))
// Escuta o server na porta 4444
server.listen(4444)
io.on('connection', socket => {
socket.on('mensagem-nova', (request, socketOrigem) => {
// Aqui você pode executar o que quiser
})
socket.on('nome-do-evento', (request, callback) => {
// Aqui você pode executar o que quiser
})
})
Pronto isso é tudo que precisa pra conectar com socket no AdonisV5. Alguns detalhes que você deve prestar atenção
- Não é obrigatório utilizar JWT
- Se utilizar JWT fica atento ao seu secret, é ele que permite você decodificar um token
- Para mais informações acesse A documentação oficial do Socket.io
Se pudesse dava mais uma estrela, comecei a usar o Adonis 5 recentemente e com ainda está na preview, existe pouco material para integração com outras libs e outros serviços que o 4 tem.
Parabéns pela iniciativa