-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
157 lines (129 loc) · 6.65 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
const express = require("express"); //framework de node.js
const app = express();
const path = require("path"); //modulo de node.js para manejar rutas de archivos
const fs = require("fs"); //modulo de node.js para manejar archivos
const MongoClient = require('mongodb').MongoClient;
const rutaArchivo = path.join( //join: toma cualquier numero de segmentos de ruta (a archivos) y los une mediante (\|/ dependiendo del sistema operativo)
// //basicamente join se encarga de unir los segmentos de ruta en una sola ruta de archivo de manera multiplataforma
__dirname, //variable de entorno proporcionada por Node.js que contiene la ruta absoluta del directorio actual desde el que se esta ejecutando el script
"public",
"modelo",
"datos.json"
)
const datosVacios = [];
// Ruta para guardar los datos en el archivo datos.json
; //ruta del archivo JSON donde se guardan los datos*/
// Configurar el directorio de archivos estáticos
app.use(express.static(path.join(__dirname, "public"))); //se configura public de directorio para archivos estaticos (HTML, CSS, JS, etc)
app.use(express.json()); // Middleware para analizar solicitudes con cuerpo JSON
/*
En resumen, un middleware es una función que se ejecuta entre la recepción de la solicitud (req) y la finalización de la respuesta (res). Puede realizar tareas como:
1. Ejecutar cualquier código
2. Realizar cambios en los objetos de solicitud (req) y respuesta (res)
3. Finalizar el ciclo de solicitud-respuesta
4. Invocar la siguiente función middleware en la pila
*/
// parsear el cuerpo de la solicitud que viene como application/json a JavaScript (asi parseara todas las solicitudes entrantes)
// Ruta para la página principal
app.get("/", function (req, res) { //funcion de Express que define una ruta para manejar las solicitudes tipo HTTP GET
res.sendFile(path.join(__dirname, "public", "vista", "admin.html"));
}); //se activa cuando se hace una solicitud GET a la raiz del servidor ("/")
//o sea que se ejecutara cuando se acceda a la URL base de la aplicacion (http://localhost:3000/)
//sendFile: envia el archivo especificado al cliente
// Ruta para otra página HTML
app.get("/dtoPersonal.html", function (req, res) {
res.sendFile(path.join(__dirname, "public", "vista", "dtoPersonal.html"));
});
app.get("/Login.html", function (req, res) {
res.sendFile(path.join(__dirname, "public", "vista", "Login.html"));
});
app.get('/index.html', function(req, res) {
res.sendFile(path.join(__dirname, 'public', 'vista', 'index.html'));
}); //no es necesario, ya con especificar la ruta raiz, eso vasta
app.get('/index.html', function(req, res) {
res.sendFile(path.join(__dirname, 'public', 'vista', 'admin.html'));
});
app.get('/admin.html', function(req, res) {
res.sendFile(path.join(__dirname, 'public', 'vista', 'index.html'));
});
const uri = 'mongodb://127.0.0.1:27017'; // Reemplaza con la URI de tu instancia de MongoDB
async function connectToMongoDB() {
const client = new MongoClient(uri);
await client.connect();
return client.db('dbAgenda'); // Reemplaza 'dbAgenda' con el nombre de tu base de datos
//return client.db('Libros'); //Hay que crear una nueva BD llamada Libros para el almacenamiento de datos
}
// Obtener libros
app.get('/verificarDatos', async (req, res) => {
try {
const db = await connectToMongoDB();
const libros = await db.collection('Estante').find().toArray(); //crear un colección llamada "Estante" para guardar lo libros allí
res.status(200).json({ contieneDatos: libros.length > 0, Estante: libros });
} catch (error) {
console.error('Error al obtener los datos:', error);
res.status(500).send('Error al verificar los datos');
}
});
// Agregar una nueva persona
app.post('/guardarDatos', async (req, res) => {
try {
const db = await connectToMongoDB();
const libro = req.body;
await db.collection('Estante').insertOne(libro);
res.status(200).send('Datos guardados correctamente');
} catch (error) {
console.error('Error al guardar los datos:', error);
res.status(500).send('Error al guardar los datos');
}
});
app.post('/guardarDatosJson', (req, res) => {
try {
// Obtener los nuevos datos del cuerpo de la solicitud
const nuevosDatos = req.body;
// Convertir los nuevos datos a formato JSON
const jsonNuevosDatos = JSON.stringify(nuevosDatos, null, 2); // El segundo argumento 'null' es para opciones de formato JSON y el tercer argumento '2' es para la indentación de dos espacios
// Escribir los nuevos datos en el archivo datos.json
fs.writeFile('public/modelo/datos.json', jsonNuevosDatos, (err) => {
if (err) {
console.error('Error al guardar los datos en el archivo:', err);
res.status(500).send('Error al guardar los datos');
} else {
console.log('Datos guardados en el archivo correctamente');
res.status(200).send('Datos guardados correctamente');
}
});
} catch (error) {
console.error('Error al procesar la solicitud:', error);
res.status(500).send('Error al procesar la solicitud');
}
});
// Eliminar libro
app.post('/borrarDatos', async (req, res) => {
try {
const db = await connectToMongoDB();
const { nombreLib } = req.body; //se extrae la propiedad email del objeto req.body y se asigna a una constante llamada email
await db.collection('Estante').deleteOne({ nombreLib }); //La función deleteOne busca un documento en la colección Personas donde el campo email coincida con el valor de la constante email. Si encuentra un documento coincidente, lo elimina
res.status(200).send('Datos borrados correctamente');
} catch (error) {
console.error('Error al borrar los datos:', error);
res.status(500).send('Error al borrar los datos');
}
});
// Actualizar libro
app.put('/actualizarDatos', async (req, res) => {
try {
const db = await connectToMongoDB();
const bookUpdated = req.body;
const { nombreLib } = bookUpdated;
await db.collection('Personas').updateOne({ nombreLib }, { $set: bookUpdated });
res.status(200).send('Datos actualizados correctamente');
} catch (error) {
console.error('Error al actualizar los datos:', error);
res.status(500).send('Error al actualizar los datos');
}
});
// Iniciar el servidor en el puerto 3000
const PORT = process.env.PORT || 3000;//verifica si la variable de entorno PORT esta definida, si no, se asigna el valor 3000
app.listen(PORT, () => {
console.log(`Servidor corriendo en http://localhost:${PORT}`);
});