Rotas e Controllers
A Partir deste momento em diante é 100% code-along, então estejam no seu replit para testarmos.
Autoestudos
Recurso | Descrição | Link |
---|---|---|
Criando WebAPI | Tutorial sobre como criar uma WebAPI com Node.js, Express e TypeScript | Link |
API Rest, Node e Typescript | Vídeo sobre criação de controller, tipagem de dados e melhorias no ESLINT | Link |
Introdução ao TS | Artigo introdutório sobre TypeScript | Link |
Configurando rotas no NodeJS com Typescript | Tutorial sobre configuração de rotas em NodeJS com TypeScript | Link |
Criando Controllers | Fórum de discussão sobre criação de controllers | Link |
Routes, Controllers, Express, NodeJS | Vídeo sobre separação de rotas e controllers em API Rest Express | Link |
Curso NodeJS com Typescript | Vídeo sobre criação de controller de usuários | Link |
Vamos atualizar o tutorial para incluir uma rota adicional no servidor para adicionar dados ao banco de dados, além de fornecer exemplos de comandos curl
para testar as funcionalidades do backend.
Atualização do Projeto com Rotas Adicionais e Testes com curl
1. Configuração Básica do Projeto
Conforme descrito anteriormente, certifique-se de que você já tenha configurado o seu projeto TypeScript no Replit com as dependências necessárias:
npm install pg express
npm install --save-dev typescript @types/node @types/pg @types/express ts-node
Crie o tsconfig.json
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"rootDir": "./src",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true
},
"include": ["src/**/*.ts"],
"exclude": ["node_modules"]
}
2. Atualizar o Script de Conexão ao Banco de Dados
Certifique-se de que o arquivo src/database.ts
contenha a configuração correta com SSL:
import { Pool } from 'pg';
// Substitua pela sua string de conexão do Render.com
const connectionString = 'sua_string_de_conexao_do_render_aqui';
const pool = new Pool({
connectionString,
ssl: {
rejectUnauthorized: false, // Permite conexões SSL não autorizadas
}
});
export default pool;
3. Script de Migração para Criar Tabela
Verifique se o arquivo src/migrations/migrations.ts
está conforme abaixo para criar a tabela users
:
import pool from '../database';
const createUsersTable = async () => {
const client = await pool.connect();
try {
const queryText = `
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
`;
await client.query(queryText);
console.log('Tabela "users" criada com sucesso!');
} catch (err) {
console.error('Erro ao criar tabela:', err);
} finally {
client.release();
}
};
createUsersTable().then(() => process.exit(0));
Execute o script de migração para garantir que a tabela seja criada:
npx ts-node src/migrations/migrations.ts
4. Adicionar Rotas no Servidor
Atualize o arquivo src/server.ts
para incluir rotas de obtenção de usuários e de adição de novos usuários:
import express from 'express';
import pool from './database';
const app = express();
const PORT = process.env.PORT || 3000;
app.use(express.json());
// Rota para obter todos os usuários
app.get('/users', async (req, res) => {
try {
const { rows } = await pool.query('SELECT * FROM users');
res.status(200).json(rows);
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Erro ao buscar usuários' });
}
});
// Rota para adicionar um novo usuário
app.post('/users', async (req, res) => {
const { name, email } = req.body;
try {
const queryText = 'INSERT INTO users(name, email) VALUES($1, $2) RETURNING *';
const { rows } = await pool.query(queryText, [name, email]);
res.status(201).json(rows[0]);
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Erro ao adicionar usuário' });
}
});
app.listen(PORT, () => {
console.log(`Servidor rodando na porta ${PORT}`);
});
5. Executar o Servidor
Execute o servidor:
npx ts-node src/server.ts
6. Testar Rotas com curl
Use os comandos curl
abaixo para testar as rotas do backend.
- Testar a Rota
GET /users
:
Execute este comando para buscar todos os usuários:
curl -X GET http://localhost:3000/users
Esse comando deve retornar uma lista de usuários armazenados no banco de dados.
- Testar a Rota
POST /users
:
Execute este comando para adicionar um novo usuário:
curl -X POST http://localhost:3000/users -H "Content-Type: application/json" -d '{"name": "João Silva", "email": "joao.silva@example.com"}'
Esse comando deve adicionar um novo usuário ao banco de dados e retornar os dados do usuário recém-criado.
Desafio
- Agora entre no DBeaver, faça a conexão e veja pelo dbeaver os dados inseridos.
- Faça o git commit e envie para o seu projeto no github.