Um projeto starter para aplicações web usando Express.js e TypeScript, configurado com as melhores práticas de desenvolvimento, testes e estrutura de projeto.
- ✅ Express.js 5.1+ - Framework web rápido e minimalista
- ✅ TypeScript - Tipagem estática para JavaScript
- ✅ Sistema de Decorators - Controllers e rotas com decorators customizados
- ✅ Reflect Metadata - Metadados para decorators e injeção de dependência
- ✅ Jest - Framework de testes com cobertura de código
- ✅ CORS configurado - Middleware para Cross-Origin Resource Sharing
- ✅ Variáveis de ambiente - Configuração com dotenv
- ✅ Health Check - Endpoint para verificação de saúde da aplicação
- ✅ 404 Handler - Middleware para rotas não encontradas
- ✅ Build otimizado - Compilação TypeScript para produção
express-typescript-starter/
├── src/
│ ├── server.ts # Arquivo principal do servidor
│ ├── config/
│ │ └── config.ts # Configurações da aplicação
│ ├── controllers/
│ │ └── main.ts # Controller principal com decorators
│ ├── decorators/
│ │ ├── controller.ts # Decorator para controllers
│ │ └── routes.ts # Decorator para rotas
│ ├── lib/
│ │ └── routes.ts # Tipos para sistema de rotas
│ ├── modules/
│ │ └── routes.ts # Lógica de definição de rotas
│ └── middleware/
│ ├── cors-handler.middleware.ts # Middleware de CORS
│ └── not-found-route.middleware.ts # Middleware 404
├── test/
│ └── integration/
│ └── server.integration.test.ts # Testes de integração
├── build/ # Arquivos compilados (gerados)
├── coverage/ # Relatórios de cobertura de testes
├── jest.config.ts # Configuração do Jest
├── tsconfig.json # Configuração do TypeScript
├── tsconfig.build.json # Configuração de build
└── package.json # Dependências e scripts
- Node.js 18+
- npm ou yarn
git clone https://github.com/zYasuo/express-typescript-starter.git
cd express-typescript-starternpm installCrie um arquivo .env na raiz do projeto:
NODE_ENV=development
SERVER_HOSTNAME=localhost
SERVER_PORT=3001npm run devO servidor estará rodando em http://localhost:3001
npm run buildOs arquivos compilados estarão na pasta build/
npm testnpm run test:watchApós executar os testes, abra o arquivo coverage/lcov-report/index.html no navegador.
| Script | Descrição |
|---|---|
npm test |
Executa todos os testes com cobertura |
npm run build |
Compila o projeto TypeScript para JavaScript |
npm start |
Inicia o servidor em produção (após build) |
POST /healthcheck
Resposta:
{
"hello": "world",
"message": "Server is running"
}Qualquer rota não definida retornará:
{
"message": "Not Found",
"path": "/rota-inexistente",
"status": 404
}| Variável | Descrição | Padrão |
|---|---|---|
NODE_ENV |
Ambiente de execução | - |
SERVER_HOSTNAME |
Hostname do servidor | localhost |
SERVER_PORT |
Porta do servidor | 3001 |
- CORS: Permite requisições de diferentes origens
- Body Parser: Parse de JSON e URL-encoded
- 404 Handler: Tratamento de rotas não encontradas
O projeto utiliza um sistema de decorators personalizado para definir controllers e rotas de forma declarativa:
Use o decorator @Controller() para definir um controller:
import { Controller } from "../decorators/controller";
@Controller("/api") // Base path opcional
class ApiController {
// métodos do controller
}Use o decorator @Routes() para definir rotas:
import { Routes } from "../decorators/routes";
import { Request, Response, NextFunction } from "express";
@Controller()
class MainController {
@Routes("post", "/healthcheck")
getHealthCheck(req: Request, res: Response, next: NextFunction) {
res.status(200).json({
hello: "world",
message: "Server is running"
});
}
}No arquivo server.ts, registre os controllers usando DefineRoutes:
import MainController from "./controllers/main";
import { DefineRoutes } from "./modules/routes";
// Registra todos os controllers
DefineRoutes([MainController], app);- Crie um novo controller em
src/controllers/ - Use os decorators
@Controller()e@Routes() - Registre o controller no array de
DefineRoutesemserver.ts
- Crie um novo arquivo em
src/middleware/ - Implemente o middleware seguindo o padrão do projeto
- Importe e use no
server.tsou como parâmetro no decorator@Routes()
Edite o arquivo src/config/config.ts para adicionar novas configurações.
O projeto usa Jest para testes com a seguinte estrutura:
- Testes de Integração:
test/integration/ - Configuração:
jest.config.ts - Cobertura: Relatórios gerados na pasta
coverage/
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Danilo Aguiar
- GitHub: @zYasuo
⭐ Se este projeto te ajudou, considere dar uma estrela no repositório!