A Partir deste momento em diante é 100% code-along, então estejam no seu replit para testarmos.
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:
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.
curlConforme 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"]
}
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;
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
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}`);
});