feat: catalogo de times com express e ejs
This commit is contained in:
commit
9bc1c4b97e
8 files changed
+1539
No files matched your search
@@ -0,0 +1,104 @@
|
||||
// Anderson Valadares Pinto (20251PL.TSIAD0018) [SLS]
|
||||
|
||||
import express from 'express';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
// Configuração para resolução de caminhos com ES Modules
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
const app = express();
|
||||
const PORT = process.env.PORT || 3000;
|
||||
|
||||
// Configuração do mecanismo de visualização EJS
|
||||
app.set('view engine', 'ejs');
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
|
||||
// Array com os dados dos times (conforme solicitado no enunciado com estádios distintos)
|
||||
const times = [
|
||||
{
|
||||
id: 1,
|
||||
nome: 'Flamengo',
|
||||
estadio: 'Estádio do Maracanã',
|
||||
cidade: 'Rio de Janeiro - RJ'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
nome: 'Palmeiras',
|
||||
estadio: 'Nubank Parque',
|
||||
cidade: 'São Paulo - SP'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
nome: 'Cruzeiro',
|
||||
estadio: 'Estádio Mineirão',
|
||||
cidade: 'Belo Horizonte - MG'
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
nome: 'Athletico-PR',
|
||||
estadio: 'Ligga Arena (AKA Arena da Baixada)',
|
||||
cidade: 'Curitiba - PR'
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
nome: 'Bahia',
|
||||
estadio: 'Arena Fonte Nova',
|
||||
cidade: 'Salvador - BA'
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
nome: 'Red Bull Bragantino',
|
||||
estadio: 'Estádio Municipal Cícero de Souza Marques',
|
||||
cidade: 'Bragança Paulista - SP'
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
nome: 'São Paulo',
|
||||
estadio: 'MorumBIS',
|
||||
cidade: 'São Paulo - SP'
|
||||
}
|
||||
];
|
||||
|
||||
// Rota GET / - Boas-vindas
|
||||
app.get('/', (req, res) => {
|
||||
res.render('index', {
|
||||
titulo: 'Catálogo de Times do Brasileirão',
|
||||
mensagem: 'Bem-vindo ao Catálogo Interativo de Times de Futebol!',
|
||||
totalTimes: times.length
|
||||
});
|
||||
});
|
||||
|
||||
// Rota GET /times - Listagem de times
|
||||
app.get('/times', (req, res) => {
|
||||
res.render('times', {
|
||||
titulo: 'Lista de Times',
|
||||
times
|
||||
});
|
||||
});
|
||||
|
||||
// Rota GET /times/:id - Detalhes de um time por ID
|
||||
app.get('/times/:id', (req, res) => {
|
||||
const id = parseInt(req.params.id, 10);
|
||||
const time = times.find((item) => item.id === id);
|
||||
|
||||
if (!time) {
|
||||
return res.status(404).render('detalhe', {
|
||||
titulo: 'Time Não Encontrado',
|
||||
time: null,
|
||||
mensagemErro: `Time com ID ${req.params.id} não foi encontrado no catálogo.`
|
||||
});
|
||||
}
|
||||
|
||||
res.render('detalhe', {
|
||||
titulo: `Detalhes - ${time.nome}`,
|
||||
time,
|
||||
mensagemErro: null
|
||||
});
|
||||
});
|
||||
|
||||
// Inicialização do servidor
|
||||
app.listen(PORT, () => {
|
||||
console.log(`Servidor rodando com sucesso na porta ${PORT}: http://localhost:${PORT}`);
|
||||
});
|
||||
Reference in new issue
Block a user