Proponer código de scripting para la recuperación de datos de una base de datos alojada en la nube mediante el desarrollo de una landing page funcional y atractiva utilizando una plantilla de Bootstrap para la adecuación a los requerimientos específicos.
Verifique el acceso a la colección de datos y compruebe que contenga datos:
https://<nombre-del-proyecto>.firebaseio.com/<nombre-de-la-coleccion>.json
Agregue al archivo index.html la jerarquía de etiquetas <!-- Suscribers - START -->
y <!-- Suscribers - END -->
. Tome como referencia el <!-- DIV contenedor del formulario -->
<section class="newsletter bg-light" style="background: url(images/pattern-bg.png) no-repeat;">
<div class="container">
<div class="row justify-content-center">
<!-- DIV contenedor del formulario -->
<div class="col-md-8 py-5 my-5">
<div class="subscribe-header text-center pb-3">...</div>
<form id="form" class="d-flex flex-wrap gap-2">...</form>
</div>
<!-- Suscribers - START -->
<div class="col-md-4 py-5 my-5">
<h4 class="element-title text-capitalize my-3">Subscribers per Day</h4>
<table class="table table-hover table-light table-borderless">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Day</th>
<th scope="col">Subscribers</th>
</tr>
</thead>
<tbody id="subscribers">
</tbody>
</table>
</div>
<!-- Suscribers - END -->
</div>
</div>
</section>
Edite el archivo de código externo js/main.js.
const databaseURL = ...
let sendData = () => { ... }
let getData = async () => { }
let ready = () => { ... }
let loaded = () => { ... }
...
fetch
para recibir los datos de la URL databaseURL. const databaseURL = ...;
let sendData = () => { ... }
let getData = async () => {
try {
// Realiza la petición fetch a la URL de la base de datos
const response = await fetch(databaseURL, {
method: 'GET'
});
// Verifica si la respuesta es exitosa
if (!response.ok) {
alert('Hemos experimentado un error. ¡Vuelve pronto!'); // Maneja el error con un mensaje
}
// Convierte la respuesta en formato JSON
const data = await response.json();
if(data != null) {
// Cuente el número de suscriptores registrados por fecha a partir del objeto data
// END
// Genere y agregue filas de una tabla HTML para mostrar fechas y cantidades de suscriptores almacenadas
// END
}
} catch (error) {
// Muestra cualquier error que ocurra durante la petición
alert('Hemos experimentado un error. ¡Vuelve pronto!'); // Maneja el error con un mensaje
}
}
let ready = () => { ... }
let loaded = () => { ... }
...
if(data != null) {
// Cuente el número de suscriptores registrados por fecha a partir del objeto data
// END
}
let countSuscribers = new Map()
if (Object.keys(data).length > 0) {
for (let key in data) {
let { email, saved } = data[key]
let date = saved.split(",")[0]
let count = countSuscribers.get(date) || 0;
countSuscribers.set(date, count + 1)
}
}
Plantilla rowTemplate
let rowTemplate = `
<tr>
<th>${index}</th>
<td>${date}</td>
<td>${count}</td>
</tr>`
if(data != null) {
// Cuente el número de suscriptores registrados por fecha a partir del objeto data
...
// END
// Genere y agregue filas de una tabla HTML para mostrar fechas y cantidades de suscriptores almacenadas
// END
}
if (countSuscribers.size > 0) {
subscribers.innerHTML = ''
let index = 1;
for (let [date, count] of countSuscribers) {
let rowTemplate = `
<tr>
<th>${index}</th>
<td>${date}</td>
<td>${count}</td>
</tr>`
subscribers.innerHTML += rowTemplate
index++;
}
}
let sendData = ( ) => {
fetch( ... )
.then(response => { ... })
.then(result => {
alert('Agradeciendo tu preferencia, nos mantenemos actualizados y enfocados en atenderte como mereces'); // Maneja la respuesta con un mensaje
form.reset()
// Recuperación de datos
getData()
})
.catch(error => { ... });
}
let ready = () => {
console.log('DOM está listo')
// Recuperación de datos
getData();
}
(STOP 1) Compruebe la petición de datos en el navegador.
For comparison here is how synchronous data fetching would work. pic.twitter.com/GTjqmpnz3K
— Yash (@yashguptaz) March 8, 2020
Asynchronous JavaScript Promises Visualized.
— Yash (@yashguptaz) March 8, 2020
Notice how Web APIs are given the task of processing the request and the output is received back by the main thread.
This shows how single-threaded JavaScript can do async operations.
Animation made by me. pic.twitter.com/p5vprPyxzn
fetch, sincronía, asíncrona, firebase, json, xml, HTTP - POST