El equipo de Couchbase DevRel ha estado trabajando con el Club del mal sitio web en freeCodeCamp materiales. 

freeCodeCamp es una organización sin ánimo de lucro que consta de una plataforma web de aprendizaje interactivo, un foro comunitario en línea, salas de chat, publicaciones en línea y organizaciones locales que pretenden hacer accesible a cualquiera el aprendizaje del desarrollo de software.

El Bad Website Club es una comunidad en línea que ayuda a los principiantes en su viaje por la programación.

Hemos estado transmitiendo para mostrar a los alumnos de fCC lo que podría ocurrir con su proyecto en condiciones más "reales". Empezamos con el curso Responsive Web Design, tomamos algunos ejemplos como el formulario de encuesta, los completamos y los llevamos a producción. Toda la serie se retransmite en YouTube, LinkedIn, Twitter y Twitch, y las grabaciones están disponibles en esta lista de reproducción de YouTube si quieres echar un vistazo: Nuevo Couchbase Streams: A partir del 31 de julio

Yo personalmente estaba transmitiendo en el Proyecto de encuesta. En esta serie de entradas de blog, te mostraré todos los pasos adicionales que puedes hacer publicando el código en GitHub, desplegando la Encuesta online con Netlify, y almacenando su contenido en Couchbase Capella.

Paso 1 - Crear un formulario HTML

Inspirándome mucho en el ejemplo de encuesta de FreeCodeCamp (copiar, pegar y recortar), obtengo el siguiente formulario HTML. Es un poco más simple que el original.

En estilos.css es exactamente igual que el original. Abrir aquí para ver el formulario de la encuesta en acción. Puede abrir en su navegador, haga clic con el botón derecho en la página y debería ver algo como ver la fuente de la página o inspeccionar. Haga clic en él y se abrirá un panel que muestra el código de la página. Mientras esté en esta vista puede hacer clic en enlaces como style.css o haga clic en el botón estilos para ver también el CSS aplicado a determinados elementos.

Para probar este ejemplo de código, primero puede clonar este repositorio en su ordenador local utilizando el terminal o puede descargarlo como archivo zip).

Screenshot of button in github where you can clone or download code

Vaya a su navegador y en la barra superior seleccione archivo, abraa continuación, seleccione index.html de la carpeta (o carpeta zip) que se descargó. Echa un vistazo a la URL de tu navegador, muestra una ruta a un archivo local. Y usted debe ver algo como esto, que no hace nada cuando se hace clic en enviar.

The screenshot of the survey from created during the freecode camp Survery lesson

La pregunta entonces es, ¿cómo lo desplegamos en Internet, cómo hacemos que haga algo? Necesitamos algún código backend que se ejecute después del clic. Y luego hacer que ese código almacene el contenido del formulario en la base de datos.

Paso 2 - Git, Github, Netlify

Empecemos por desplegar este formulario en directo en Internet. Para ello vamos a utilizar Netlify. Lo primero es asegurarnos de que tenemos el archivo Netlify CLI disponible, y que hemos iniciado sesión. Si no está instalado, la ruta más rápida es escribir en su terminal:

Encontrará más información en Documentación de inicio de Netlify.

Mecanografía versión de netlify en mi terminal actualmente me da netlify-cli/15.6.0 win32-x64 node-v18.5.0. Así que sé que está instalado y listo.

Lo siguiente que hay que hacer es escribir netlify login en tu terminal. Te llevará a través del formulario de registro de Netflify.

Ahora todo debería estar listo para pasar a la fase de despliegue. Pero sólo para asegurarse de que vamos a probar las cosas a nivel local. Porque eso es lo que hacen la mayoría de los desarrolladores. Para ello, escriba netlify dev en tu terminal.

Debería mostrar lo siguiente en tu terminal y abrir tu formulario en tu navegador.

Si vuelves a mirar la barra de URL del navegador, verás que es diferente. Parece una dirección web, no un archivo local. Enhorabuena, acabas de ejecutar tu primer servidor local, sirviendo tu archivo HTML y CSS, usando Netlify dev¡! Usted tiene un sitio web que se ejecuta en su máquina. Ahora vamos a hacer esto accesible a todos en Internet, tanto el código fuente y el sitio en sí.

Ve a GitHub (o GitLab, o Heptapod, o cualquier otra solución de alojamiento de código fuente, ¡hay otras por ahí!) y crea un nuevo Repositorio. Visita https://github.com/new para Github. Ahora estás en el asistente de creación de repositorios. Sólo he configurado mi organización, mi nombre repo y una descripción que haga clic en el Crear repositorio botón.

A screenshot of Github's repository creation wizard

A screenshot of a newly intitialized Github repo

Te dará todas las instrucciones necesarias para convertir tu carpeta de trabajo en un git y enlázalo a tu proyecto GitHub. Esto es lo que escribí en mi terminal (puedes copiar y pegar lo siguiente en tu terminal o presionar enter después de cada línea para que se ejecute. Ten en cuenta que tendrás que cambiar la línea 6 para que sea la URL del repositorio de tu proyecto):

Esta es la salida del terminal resultante:

 

Ahora si vuelvo a la página de Github y la recargo, esto es lo que veo:

A screenshot of the github repository after an intial commit was pushed

Enhorabuena, tu código ya está disponible en Github, para que todo el mundo lo vea, aprenda de él y contribuya. ¡Ahora es el momento de la producción! Vamos a hacer que el sitio web en vivo 💪

Visite https://app.netlify.com/start/deploy. Esto le llevará al nuevo asistente de proyecto de Netify. Verá varios botones para ayudarle a empezar, GitHub, GitLab, Bitbucket, AzureDevops. Vamos a hacer clic en GitHub.

A screenshot of the Netlify Wizard for new project creation

Verás un par de ventanas pidiéndote que vincules tu perfil de GitHub a Netlify. Sigue adelante y procede, te llevará a la siguiente página.

A screenshot of the second step of Netlify's project creation wizard after picking Github

Netlify me dice que no tengo ninguna aplicación Netlify instalada en ningún org de GitHub. Haga clic en Configurar Netlify en GitHubse abrirá una ventana pidiéndote que selecciones el org de GitHub en el que quieres instalar Netlify, y a qué repositorio quieres darle acceso.

A screenshot of Github's authorization matrix

Dejo el valor por defecto y proceder al siguiente paso. A partir de ahora deberías ver todos los repositorios en tu cuenta de GitHub.

A screenshot of Netlify's project List showing linked Github project

Voy a dejar el valor por defecto y haga clic en Despliegue miproyecto:

A screenshot of the default Netlify project configuration

 

Usted verá un enlace a su recién desplegado en el sitio web de Internet, para mí es https://jolly-sfogliatella-3e6c07.netlify.app/. Netlify proporciona un entorno de sandboxes bajo la plataforma netlify.app para que puedas desplegar cosas sin tener tu propio nombre de dominio.

A screenshot of a newly created Project

Enhorabuena, tu web ya está en Internet. Tómate un minuto para celebrarlo 🎉.

Ahora podemos vincular este proyecto Netlify introduciendo enlace netlify en el terminal. Se ofrecerá una lista de opciones. Seleccione la predeterminada, que debería ser Utilizar el origen remoto git actual (https://github.com/yourOrg/yourProject). Debido a que ha desplegado a través de GitHub, Netlify tiene la información git de su repositorio y puede inferir qué proyecto utilizar (y también en ese punto es probable que sólo tenga un proyecto). Esto es lo que la salida se ve para mí:

Ahora podemos probar un par de cosas. Voy a añadir un emoji 🐼 a mi formulario porque por qué no. En index.htmlEstoy modificando la línea 9 de esto: <h1 id="”title”" class="”text-center”">Formulario de encuesta</h1> a este <h1 id="”title”" class="”text-center”">Formulario de encuesta 🐼</h1>

A continuación, guardo el archivo y envío los cambios a Github. Luego, en el terminal, escribo netlify open:site:

Algo muy guay está pasando. Debido a que su repositorio de GitHub está vinculado a Netlify, un nuevo despliegue se hará automáticamente por Netlify. Así que al abrir el sitio web, verá el Panda <3.

En ese punto tenemos un repositorio de Github que contiene nuestro código, que está integrado a Netlify, que creará automáticamente un nuevo despliegue cuando empuje nuevo código. Y también tenemos un configurado netlify CLI en nuestra carpeta de trabajo. ¡Estamos listos para escribir código backend!

Paso 3 - Backend

En este capítulo responderemos a la siguiente pregunta: ¿Qué ocurre cuando alguien rellena el formulario y hace clic en enviar ?

La respuesta ahora mismo es: Nada. Cambiemos eso. Escribiendo algo de JavaScript. Vamos a mostrar una alerta emergente cuando alguien introduzca información válida y haga clic en Enviar. En su index.html pondrá lo siguiente <script> entre la última etiqueta div de cierre </div> y antes de la etiqueta de cierre del cuerpo </body>. 

 

Si guarda su código y vuelve a cargar la página, rellene el formulario, haga clic en enviardeberías ver algo como esto:

A screenshot of a sucessfull form submission

Ahora que tenemos algo que sucede cuando un usuario envía el formulario, vamos a ir un poco más allá. Queremos ver el contenido del formulario y asegurarnos de que podemos obtener los datos correctos en JSON. Queremos una cadena para el nombre, un entero para la edad y un booleano para la recomendación.

Y resulta que la casilla de verificación HTML no juega limpio. El valor que da por defecto es ningún valor, y una vez marcado da el contenido del campo valor. Vamos a añadir otro campo de entrada, oculto, para asegurarnos de que el valor por defecto será False.

En cuanto al código JavaScript, hay algunas líneas nuevas interesantes.

Una vez aclarado esto, pongámonos serios y empecemos a crear una función Netlify. Introduzca netlify función:crear en tu terminal. Deberías ver algo como:

Seleccione Sin servidor deja el valor por defecto para la siguiente pregunta sobre la ruta, mantiene JavaScript como lenguaje, mantiene el valor por defecto hola-mundo plantilla, que dar un nombre a su función. La mía se llama saveform. Esto generará nuevos archivos en la carpeta netlify. Si ejecuta netlify dev ahora, verá nuevas líneas en los registros:

Esto significa que nuestro servidor netlify dev también está sirviendo a nuestra función recién creada. Echa un vistazo al archivo recién generado ./netlify/functions/saveform/saveform.js.

Probémoslo llamando a esta función cuando el usuario haga clic en enviar. Basta con añadir el siguiente código después del último console.log llamar:

Añadir, confirmar y empujar. netlify open:admin

A screenshot showing the Netlify site administrator overview, with the list of all deployments already done

A screenshot of the form page and the developer tools opened, showing the message returned by the Netlify function

En este punto, usted tiene un frontend y un backend desplegados, en Internet. Pero todo lo que estamos haciendo es llamar a la función por defecto creada por el asistente de Netlify. El siguiente paso es enviar el contenido del formulario a esa función, y almacenarlo en una base de datos.

Paso 4 - Base de datos

Lo primero que hay que hacer es averiguar cómo enviar los detalles del formulario a la función. Esto requiere que cambiemos nuestro método GET por un método POST. Estas cosas se llaman métodos de petición HTTP, a veces referidos como verbos HTTP. Puedes consultar la lista completa en MDN. Una solicitud del método Get sólo se utiliza para recuperar datos. Un método post se utiliza para crear o modificar datos. Esto es exactamente lo que queremos. Queremos crear una nueva entrada en nuestro Dababase cuando alguien envía un formulario. Una petición HTTP tiene un método, algunas cabeceras (metadatos sobre sus peticiones, aquí estamos diciendo que la petición será contenido JSON con la cabecera Content-Typ), y un cuerpo. El cuerpo de nuestra petición será texto JSON.

Nuestra petición HTTP del frontend a nuestro backend ha cambiado, ahora necesitamos adaptar el código del backend.

 

Debería ver un mensaje diferente en la consola de desarrollo web, debería ver {"name": "yourName"}.

Hemos enviado los datos del formulario al backend y nos hemos asegurado de ello. Ahora en el lado de la base de datos de las cosas. Trabajando en Couchbase, esta es la base de datos que voy a utilizar. Una forma sencilla de probar, vaya a https://cloud.couchbase.com/sign-upCrea una cuenta y disfruta de 30 días de prueba sin necesidad de tarjeta de crédito.

A screenshot of the first Couchbase Capella Get started wizard step

Puedes dejar activada la opción por defecto o elegir tu proveedor de nube favorito y la región más cercana. Haga clic en Desplegar ahora y espere a que se despliegue su base de datos.

A screenshot of the Couchbase Capella trial home

Dos cosas que queremos hacer desde allí. Asegurarnos de que podemos conectarnos a esa base de datos desde nuestro código backend, y asegurarnos de que podemos escribir los datos en alguna parte. Siga adelante y haga clic en el Conectar ficha.

En Couchbase almacenamos los datos en Buckets. Por defecto la prueba viene con un bucket de muestra de viaje preimportado. No vamos a utilizarlo. En su lugar vamos a crear nuestro propio bucket. Haz click en Ajustes en el menú de nivel superior, que en Cubos en el menú de la izquierda.

A screenshot of the Bucket settings in Couchbase Capella

Ahora haga clic en + Crear cubodale un nombre y deja el resto con la configuración por defecto. Crear cubo.

A screenshot of the Buckets settings home, with the newly created bucket visible

Tenemos un nuevo Bucket, ahora necesitamos crear las credenciales asociadas. Haz clic en el botón Acceso a bases de datos que Crear acceso a base de datos botón.

A screenshot of the empty Credentials settings

A screenshot fo the credentials creation detail

Asegúrese de recordar tanto el nombre de usuario como la contraseña y haga clic en Crear base de datos. Una última cosa que hay que hacer es permitir que esta base de datos sea accesible públicamente. Ahora mismo está oculta. Haga clic en Direcciones IP permitidasque Añadir IP permitida. Haga clic en Permitir el acceso desde cualquier lugarSiga las instrucciones. Esto debería rellenar el formulario, a continuación, haga clic en el botón Añadir IP permitida botón. Puede que pienses que esto es un poco engorroso. ¿Por qué no viene por defecto?

A screenshot of the Allow Access from Anywhere popup

A screenshot of the resuting operation with the newly added IP range

Ahora haga clic en el botón Conectar pestaña. Verá el icono Cadena de conexiónselecciona las credenciales de tu base de datos, cambia el lenguaje a Node, y nos dará las instrucciones correctas para conectarnos a la base de datos desde nuestro código backend.

A screenshot of the SDK connection instructions, with doc and code

Podemos copiar y pegar esto en el código de nuestra función, y añadir un par de cosas más:

Para Couchbase es necesario instalarlo. Ejecutar npm i couchbase@4.2.4 hará el truco. En este momento la compatibilidad Netlify/Couchbase está asegurada para Couchbase versión 4.2.4 o inferior. Esto se debe a la naturaleza de nuestro SDK. Es una interfaz de JavaScript en la parte superior de nuestro C SDK. Y las dependencias de C esperan encontrar sus dependencias del sistema en la versión correcta. Ahora mismo Couchbase 4.2.5 espera encontrar GLIBC_29 pero no está disponible en el sistema Ubuntu que ejecuta nuestro código backend Netlify.

Ahora que tenemos dependencias, seamos explícitos en cómo construirlas. Puedes añadir un netlify.toml en la raíz del repositorio con el siguiente contenido:

Hace un par de cosas. Instalar las dependencias y eliminar la tabla de símbolos de depuración de couchbase_impl.node. Este archivo es la librería C usada por nuestro SDK de Node. Y es demasiado grande para Netlify en este momento. Así que estamos eliminando el desorden innecesario que viene del proceso de construcción.

Ahora usted podría agregar los nuevos archivos, confirmar y empujar a GitHub. Pero eso sería empujar su contraseña a GitHub. No queremos eso. En su lugar puedes probarlo ejecutando netlify dev. Siga adelante y vuelva a enviar el formulario.

Si todo ha ido bien, ¡has escrito datos en tu Base de Datos! Puedes comprobarlo fácilmente accediendo a la UI de Couchbase Capella. Haz clic en Herramientas de datosSeleccione el cubo, el ámbito y la colección, y debería ver su encuesta desde el documento.

Esto es genial, ¡acabas de escribir código para conectar tu base de datos!

Paso 5 - Gestión de la configuración

Para evitar empujar nuestras credenciales en GitHub, vamos a utilizar variables de entorno. Las variables de entorno son comunes a todos los sistemas operativos y es la mejor manera de gestionar la configuración a través de diferentes entornos (diferentes sistemas operativos, nubes, prueba, puesta en escena, preproducción, producción, lo que se adapte a su flujo de trabajo).

En Mac o Linux, puede ejecutar export MYVARIABLE="valor" en tu terminal. En Windows puede ejecutar $Env:MYVARIABLE="valor"

Para definirlos en el contexto de Netlify, puede ir a través de la interfaz de usuario y hacerlo manualmente, o utilizar la CLI:

Ahora puedes añadir tus archivos, hacer commit y push de tu código. Felicidades, te has vuelto fullstack. Backend, Frontend y Base de Datos. ¡Y desplegado todo en vivo! Pero nuestro trabajo no ha terminado. Todavía hay un par de cosas que podemos hacer para que esto sea más profesional.

Paso 6 - Comentarios de los usuarios

En este momento no tenemos mucho que sucede cuando el usuario hace clic en el Enviar de nuestro formulario. Tenemos que cambiar esto para hacerles saber que han sido recortados con éxito, o no. El primer paso es comprobar si hay un error en el lado dev de las cosas. Los códigos de estado HTTP están bien hechos, cualquier cosa igual o superior a 400 suele ser un error, así que podemos hacer algo como esto:

Para probarlo, simplemente comete un error en alguna parte de tu cadena de conexión o credenciales a Couchbase. Deberías ver errores en la consola web al hacer clic en Enviar. Pero la consola web es sólo para nosotros, tenemos que añadir un error adecuado o mensaje de éxito a nuestro usuario.

He añadido un par de elementos span HTML con mensajes de error y éxito justo antes del final del formulario. Tenga en cuenta el ocultar Clase CSS que los hace invisibles por ahora.

Y aquí está el CSS correspondiente. Mostrando el error en rojo, ocultando o mostrando un elemento, y una bonita animación de desvanecimiento porque soy así de elegante.

Ahora a juntarlo todo. Las dos primeras líneas obtienen los nuevos elementos span que se acaban de añadir. La llamada a form.reset() es borrar todos los valores del formulario cuando el código de estado de respuesta devuelto es 200. El resto es jugar con las clases CSS para hacer que el mensaje aparezca, que se desvanezca con la adición de la clase fade-out, que una función de tiempo de espera de 7000ms eliminará todas las clases y ocultará el elemento de nuevo. Es más o menos lo mismo cuando hay un error.

Ahora puedes probar a enviar un formulario de nuevo y ver los diferentes mensajes de éxito o error, dependiendo de lo que hayas decidido hacer. Cuando estés satisfecho puedes añadir, confirmar y empujar ese código.

Enhorabuena, ¡has llegado al final de esta guía! Has utilizado git, GitHub, Netlify y Couchbase Capella para desplegar un formulario HTML en la web, y te has asegurado de que el contenido se almacenaba en una base de datos cada vez que los usuarios enviaban el formulario.

¿Quieres más?

Autor

Publicado por Laurent Doguin

Laurent es un metalero empollón que vive en París. Principalmente escribe código en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programación reactiva y otras cosas de moda. También fue Developer Advocate de Clever Cloud y Nuxeo, donde dedicó su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en Couchbase.

Dejar una respuesta