Estrutura básica de uma app

Estrutura básica de diretórios e ficheiros numa app Express

Uma estrutura organizada ajuda a manter o código limpo, modular e fácil de manter. Um exemplo comum e recomendado de estrutura é:

project-root/
├── src/
│ ├── config/
│ │ └── db.js # Configurações externas, como base de dados
│ ├── controllers/
│ │ └── userController.js # Lógica do negócio e manipulação das requisições
│ ├── models/
│ │ └── userModel.js # Definição dos modelos de dados
│ ├── routes/
│ │ └── userRoutes.js # Definição das rotas REST ou endpoints
│ ├── middlewares/
│ │ └── authMiddleware.js # Middlewares personalizados (autenticação, logs, etc.)
│ ├── utils/
│ │ └── helper.js # Funções utilitárias
│ ├── app.js # Configuração do Express e middleware
│ └── server.js # Inicialização do servidor e porta
├── public/ # Arquivos estáticos (CSS, JS, imagens)
├── test/ # Testes unitários ou funcionais
├── node_modules/ # Dependências instaladas (gerado pelo npm)
├── .env # Variáveis de ambiente
├── .gitignore # Configurações para Git
├── package.json # Metadados e dependências do projeto
├── package-lock.json # Controle de versões das dependências
└── README.md # Documentação do projeto

Explicação dos ficheiros essenciais

  • app.js: Ponto onde a aplicação Express é configurada. Aqui se define os middlewares (e.g. express.json() para JSON request body), as rotas principais e a configuração geral da app.
const express = require('express');
const app = express();
const userRoutes = require('./routes/userRoutes');

app.use(express.json()); // Middleware para JSON
app.use('/api/users', userRoutes); // Define as rotas da API para usuários

module.exports = app;
  • server.js: Responsável por iniciar o servidor, definir a porta e rodar a app.
const app = require('./app');
const dotenv = require('dotenv');

dotenv.config();

const PORT = process.env.PORT || 3000;

app.listen(PORT, () => {
console.log(`Server rodando na porta ${PORT}`);
});
  • routes/: Diretório onde ficam os ficheiros que definem as rotas. Exemplo de rota básica:
const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
res.send('API funcionando');
});

module.exports = router;
  • public/: Contém arquivos estáticos que o Express vai servir diretamente (CSS, imagens, JS para front-end).

O ficheiro package.json: metadados e dependências

O ficheiro package.json é o manifesto do projeto Node.js e define metadados, scripts e dependências. Exemplo básico para um app Express:

{
"name": "meu-app-express",
"version": "1.0.0",
"description": "Um app básico usando Express.js",
"main": "server.js",
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js"
},
"author": "Seu Nome",
"license": "MIT",
"dependencies": {
"express": "^4.18.2",
"dotenv": "^16.0.0"
},
"devDependencies": {
"nodemon": "^2.0.22"
}
}
  • name, version, description: Informações básicas do projeto.
  • main: Ficheiro de entrada da aplicação.
  • scripts: Comandos que podem ser executados com npm run start ou npm run dev.
  • dependencies: Bibliotecas necessárias para rodar a aplicação (Express, dotenv etc).
  • devDependencies: Dependências para ambiente de desenvolvimento (ex.: nodemon para reiniciar servidor automaticamente).

Essa organização facilita a escalabilidade do app e a manutenção. A estrutura pode ser adaptada ao porte ou complexidade do projeto, mas essa base é eficiente para a maioria dos casos com Express.js.