// Anderson Valadares Pinto (20251PL.TSIAD0018) [SLS] import path from 'node:path'; import { fileURLToPath } from 'node:url'; import express from 'express'; import mongoose from 'mongoose'; import instrumentoRoutes from './routes/instrumento.js'; // 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 = Number(process.env.PORT) || 3000; const MONGODB_URI = process.env.MONGODB_URI || 'mongodb://127.0.0.1:27017/loja_instrumentos'; // Configuração do mecanismo de visualização EJS app.set('view engine', 'ejs'); app.set('views', path.join(__dirname, 'views')); app.use(express.urlencoded({ extended: true })); // Funções de formatação disponíveis em todos os templates. app.locals.formatarPreco = (valor) => new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL', }).format(Number(valor) || 0); app.use('/', instrumentoRoutes); // Página não encontrada. app.use((req, res) => { res.status(404).render('erro', { titulo: 'Página Não Encontrada', codigo: 404, mensagem: 'O endereço que você tentou abrir não existe.', }); }); // Qualquer erro inesperado cai aqui, em vez de derrubar o servidor. app.use((erro, req, res, next) => { console.error(erro); res.status(500).render('erro', { titulo: 'Erro Interno', codigo: 500, mensagem: 'Algo deu errado ao processar a solicitação. Tente novamente.', }); }); async function iniciar() { await mongoose.connect(MONGODB_URI); console.log(`Conectado ao MongoDB em ${MONGODB_URI}`); app.listen(PORT, () => { console.log( `Servidor rodando com sucesso na porta ${PORT}: http://localhost:${PORT}/instrumentos` ); }); } iniciar().catch((erro) => { console.error('Não foi possível iniciar a aplicação:', erro.message); process.exit(1); });