Clojure permite crear un servidor web robusto y listo para soportar concurrencia de forma rápida y simple. Podemos utilizar dos librerías populares para esto:
Gracias al poderoso sistema de macros de Clojure, crear rutas para un sistema CRUD es sencillo y fácil de entender.
Instructor: [0:00] Crearemos un pequeño servidor web utilizando dos librerías bastante populares. Este HTTP Kit que provee de las funcionalidades del servidor y Compojure para el manejo de rutas. Utilizaremos Leiningen como herramienta para crear y manejar el proyecto. Esta es la herramienta más utilizada, casi estándar.
[0:17] Para crear la aplicación en la terminal, iniciamos Leiningen con simplemente lein new template app y el nombre de nuestra aplicación que simplemente será simplemente "server". Una vez finalizado el proceso, podemos ver dentro del directorio server un listado de archivos.
[0:33] Primero agregaremos nuestras dependencias en el archivo project.clg. En este podemos ver que hay dos variables FIXME que son básicamente para definir nuestra descripción. BeerJS server. Y aquí podemos definir nuestras dependencias.
[0:50] Primero, agregaremos http-kit en su versión 2.3., y la librería compojure, su versión 1.6.1. Ahora nos podemos enfocar en el código que está dentro de nuestro archivo core.clg.
[1:06] Lo primero que podemos ver aquí en nuestro name space que define nuestro módulo, lo primero es requerir o importar la librería de server. Para eso utilizaremos el símbolo require org.httpkit.server y agregaremos el alias server.
[1:25] Ahora en la función principal simplemente definiremos utilizando let, un puerto que leeremos desde las variables de ambiente llamada PORT o un valor que definimos nosotros de 8080, e iniciaremos el servidor utilizando un server que recibe una función inicial y un puerto proveniente del anterior. Finalmente, simplemente utilizaremos este println que es un console log para mostrar que se está ejecutando el servidor en localhost con el puerto 8080.
[2:07] Ahora simplemente nos queda definir esta función "baby-steps" para lo que utilizaremos defn baby-steps que recibe un vector con un parámetro llamado "req" y retornará simplemente un mapa con el estado 200, unas cabeceras que simplemente dicen que será "Content-type", "text/html". Y un body que nos muestra un "Hola mundo desde el servidor."
[2:37] Typo, volvamos.
[2:38] Volvemos a nuestra consola lein run y nuestro servidor está ejecutándose en localhost. Podemos verlo en localhost8080.
[2:47] Recuerden que utilizamos una variable de ambiente. Vamos a hacer que sea el puerto 6060, lein run. No está aquí, sino que está ahora ejecutándose en 6060.
[3:00] Ahora agregaremos algo de routing. Primero, importamos la librería compojure y su namespace core y también su namespace route, al que nos referiremos como route. Ahora crearemos una función para definir nuestras rutas utilizando "defroutes" proveniente de las macros de compojure, y le llamaremos app-routes.
[3:23] Usaremos otras macros definidas por compojure para definir cada ruta. Cada ruta GET al route que ejecutará la función get-handler. Otra ruta POST en /post que ejecutará la función post-handler, y finalmente una ruta con error 404.
[3:43] Cambiamos ésta llamada a baby-steps como entrada inicial le pasamos nuestra función app-routes. Tenemos que definir ahora nuestras funciones get-handler y post-handler que también recibe un argumento llamado req.
[4:01] En el caso de get-handler, es idéntica a nuestra función baby-steps, así que simplemente la vamos a renombrar. Y nuestra función post-handler será muy similar a get-handler, en este caso para el ejemplo, pero retornaremos en vez de un Content-Type html luego tenemos json y aprovecharemos de utilizar una función que llamaremos json-response.
[4:29] También tenemos que crear defn jason-response, no recibe ningún argumento, que va a retornar un json bastante manual por ahora que dice, "Saludos BeerJS". Guardamos.
[4:46] Ejecutamos nuestro servidor. Volvemos a nuestro navegador. Tenemos nuestra ruta get y podemos verificar nuestro post utilizando una llamada a fetch. Y podemos probar nuestra ruta post utilizando un poquito de JavaScript en la consola. Creamos una función post que simplemente hace uso de la [inaudible] fetch.
[5:10] Simplemente la ejecutamos y tenemos nuestra "Saludos desde BeerJS". Tratamos de probar nuestra ruta 404. Perfecto.
[5:19] En resumen, [inaudible] ofrece suficientes herramientas y un poderoso sistema de macros para crear rápidamente un servidor web con diferentes rutas para implementar un sistema CRUD.
Member comments are a way for members to communicate, interact, and ask questions about a lesson.
The instructor or someone from the community might respond to your question Here are a few basic guidelines to commenting on egghead.io
Be on-Topic
Comments are for discussing a lesson. If you're having a general issue with the website functionality, please contact us at support@egghead.io.
Avoid meta-discussion
Code Problems?
Should be accompanied by code! Codesandbox or Stackblitz provide a way to share code and discuss it in context
Details and Context
Vague question? Vague answer. Any details and context you can provide will lure more interesting answers!