Files
DBE-S04/app.js
T

69 lines
1.9 KiB
JavaScript

// 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);
});