Criação de annotations/decorators para desenvolver com ExpressJs ( Ajuda )
Bem, desde minha última postagem, eu andei estudando bastante o backend. Fiquei encantado e meio que eu decidi que vou estudar tudo que for necessário para criar a minha primeira aplicação da forma mais confortável e saudável possível.
No momento, estou tentando esquematizar uma maneira de desenvolver aplicações express utilizando decorators, até mesmo para aprender novamente os pilares da POO.
No momento, estou com uma dúvida e vim compartilhar com o mundo. Como que eu faço para transformar métodos em decorators que setam métodos?
Pode ser confuso, mas a coisa mais parecida com isso seriam os annotations do Java Spring Boot ou os próprios decorators que o NestJs usa. Preciso de ajuda 😅
@Controller("/")
export class MainController {
@Get("/")
getA(req: Request, res: Response) {
return "algo aqui";
}
@Post("/")
PostB(req: Request, res: Response) {
return "algo aqui";
}
}
Olá @Enikson
Sobre Meta Programação Suponho que está utilizando TypeScript não? Se sim, dá uma olhada nessas docs aqui https://www.typescriptlang.org/docs/handbook/decorators.html
Com JS puro não tenho certeza que haveria alguma forma de meta programação.
Sobre o TypeScript, basta você declarar no arquivo de configurações que está utilizando as anotações experimentais
{
"compilerOptions": {
"target": "ES5",
"experimentalDecorators": true
}
}
Esse arquivo seria o tsconfig.json
Aí, segundo as documentações, você deveria ser capaz de criar suas próprias anotações definindo as funções e "decorando" os métodos necessários
Aqui tem outro exemplo https://dev.to/omarkdev/uma-introducao-pratica-a-decorators-no-typescript-3653 (Créditos ao Marcos Felipe)
Sobre seu objetivo Integrar o ExpressJS por trás da meta programação vai ser outra tarefa. Eu iria por partes e dividindo o problema em etapas: Primeiro entender como definir e executar meta programação na linguagem que está utilizando e futuramente agregar o framework de HTTP que deseja (no caso o ExpressJS)
Nos diz aí se teve sucesso futuramente e a gente evolui essa thread.
Eae, tudo certo?
Há alguns dias, fiz algo parecido com o que você está tentando fazer. Desenvolvi uma lib que aplica decoradores em controladores. Para isso, utilizei a estrutura de dados Map para armazenar metadados relacionados aos controladores. Fiz isso mais como um projeto amador para estudar. Se desejar, você pode dar uma olhada no repositório da minha lib, pode te dar uma ideia de por onde começar.
Espero ter ajudado.