‫Instructor: Bienvenido de nuevo.
‫Así que espero que esté disfrutando de esta sección hasta ahora y
‫que disfrute trabajando con Node. js.
‫Así que sigamos adelante con
‫nuestro proyecto y creemos una API web extremadamente simple.
‫Ahora, para empezar, ¿qué es realmente una API?
‫Bueno, la respuesta larga, la
‫aprenderás en una de las siguientes secciones, pero por ahora, la respuesta
‫corta, al menos en este contexto de API web, básicamente,
‫una API es un servicio al que podemos solicitar algunos datos, entonces, en
‫este caso, los datos que el usuario quiere solicitar son datos
‫sobre los productos que estamos ofreciendo en
‫esta granja de nodos, es decir, en este proyecto.
‫Entonces tengo aquí esta carpeta de datos de desarrollo, y allí, tengo
‫un archivo JSON, y JSON, en caso de que no lo sepa,
‫es un formato de texto muy simple
‫que se parece mucho a un objeto
‫JavaScript, por lo que se ve así , y
‫podemos tener matrices, que en realidad tenemos, por lo
‫que tenemos una matriz grande, que luego contiene estos cinco
‫objetos, y cada objeto tiene la ID, el nombre del
‫producto, la imagen, etc.
‫Ahora cada uno de estos tiene que ser una cadena para cada una de
‫las claves, y luego tenemos el valor.
‫Entonces, básicamente, estos datos aquí son los que nuestra API
‫enviará al cliente cuando se solicite.
‫Entonces tendremos otra ruta aquí.
‫Así que aquí, de lo contrario, si el nombre de la ruta es igual a / api.
‫Y por ahora, como marcador de posición, simplemente enviaremos
‫la API así.
‫Entonces, lo que queremos hacer ahora es leer los
‫datos de este archivo aquí, luego analizar JSON en JavaScript y
‫luego enviar ese resultado al cliente.
‫Entonces, algo muy simple, así que pongámonos manos a la obra.
‫Entonces, el primer enfoque para hacer esto
‫es entrar en esta ruta y luego leer el archivo aquí
‫usando la función de lectura de archivo, ¿verdad?
‫Así que comencemos por hacer eso.
‫Entonces fs. , y en realidad es
‫readFile, no fileRead, entonces readFile, y luego el nombre del archivo.
‫Ahora, recuerde cómo le dije antes que
‫esta no es la única forma de ubicar nuestro archivo
‫en el sistema de archivos.
‫Por ahora usémoslo todavía, pero después de
‫que lo tengamos escrito aquí, les
‫mostraré otra forma.
‫Entonces, una nota, este punto aquí en realidad se refiere al directorio desde el
‫cual ejecutamos el comando de nodo en la terminal.
‫Entonces, nuevamente, este punto aquí ahora
‫representa esta carpeta actual aquí porque ahí es
‫donde realmente ejecutamos el comando de nodo, por lo que en esta
‫carpeta de 1-nodo-granja, que es nuestro directorio de
‫trabajo actual de todos modos en este caso, pero podríamos
‫tener ejecute el comando de nodo en otro
‫lugar, y luego el punto significaría algo más.
‫Entonces, por ejemplo, podríamos encontrar perfectamente, ir al escritorio y
‫ejecutar el nodo allí, y luego especificar la
‫ruta completa para indexar. js, pero podríamos hacer eso, pero
‫en este caso, el punto significaría el escritorio, por lo que si comenzamos
‫el script desde el escritorio, entonces este
‫aquí, este punto, significaría el escritorio, por
‫lo que no siempre es ideal. , y por lo
‫tanto, existe una mejor manera.
‫Entonces, todo Node. js, obtienen
‫acceso a una variable llamada dirname, y esa variable
‫siempre se traduce al directorio en el que se
‫encuentra el script que estamos ejecutando actualmente.
‫Entonces, en este caso, en realidad es el
‫mismo lugar porque index. js también está en
‫esta carpeta de la granja de nodos, pero nuevamente,
‫por las razones que mencioné antes,
‫muchas veces es una mejor práctica usar la variable dirname, así
‫que hagámoslo, y para eso, creamos una
‫cadena de plantilla, y luego
‫usamos la variable, por lo que es __dirname, que significa nombre de directorio.
‫Y, por lo general, lo hacemos así.
‫Ahora hay una excepción a
‫esta regla, que es la función require.
‫Entonces, cuando necesitemos módulos, en
‫realidad podemos requerir nuestros propios módulos, y lo haremos
‫un poco más tarde, como en el
‫siguiente, o en uno de los dos videos siguientes, y
‫allí, el punto en realidad también significa el trabajo actual directorio y no el
‫lugar desde el que estamos ejecutando el script.
‫Así que tenga en cuenta que la función require
‫es una excepción a esta regla, pero
‫por lo general, el punto es
‫donde se ejecuta el script y __dirname es donde se encuentra el archivo actual.
‫Bien, ahora vamos a especificar la codificación del archivo utf-8, y
‫luego nuestra función de devolución de llamada, que es el error
‫primero, recuerde, por lo que ahora tenemos acceso a estos datos.
‫Ahora los datos están en JSON, por lo que en JavaScript,
‫tenemos algo integrado que se llama JSON. analizar gramaticalmente.
‫Entonces, esto tomará el código JSON,
‫que en realidad es
‫una cadena, y luego lo convertirá automáticamente en JavaScript, por lo que
‫en este caso, un objeto o matriz de JavaScript.
‫Llamemos a este productoData,
‫y luego también echemos un vistazo rápido.
‫Entonces en la consola en este caso.
‫Entonces, reiniciando el servidor, y ahora, no olvides
‫presionar la ruta / api, y oh, ¿qué está pasando aquí?
‫Oh, de hecho reiniciamos el servidor.
‫Y ahora obtenemos una
‫API de respuesta, y ahora echemos un vistazo
‫aquí, en realidad, al objeto de datos del producto.
‫Entonces, este es solo un objeto agradable, con todos
‫los datos que teníamos en estos datos. json archivo.
‫Muy bien, ahora el siguiente paso es
‫enviar estos datos como respuesta.
‫Ahora esta respuesta. El método end
‫aquí en realidad necesita enviar una cadena y no un objeto aquí.
‫Y, de hecho, lo que queremos devolver son
‫los datos directamente, por lo que los datos son una cadena que luego transformamos
‫en un objeto usando JSON. parse, pero por ahora,
‫en realidad no tendríamos necesidad de hacer eso, pero lo hice
‫de todos modos porque lo necesitaremos
‫más adelante cuando comencemos a construir nuestras plantillas HTML.
‫Entonces es cuando necesitaremos estos
‫datos en formato JavaScript.
‫Por ahora, solo queremos devolver la cadena real
‫que recibimos.
‫Ahora, antes de que podamos hacer eso, en realidad
‫necesitamos especificar, por lo
‫que debemos decirle al navegador que estamos enviando JSON, así que al igual que
‫antes, cuando configuramos el tipo de contenido en texto / html,
‫ahora necesitamos decirle a un navegador que estamos enviando JSON.
‫Entonces decimos res. writeHead como antes, y ahora
‫estamos usando el código de estado 200,
‫que significa okay, y luego el objeto de los encabezados.
‫En este caso, solo será uno, así
‫que Content-type, y cuando enviemos JSON, debemos decir application / json.
‫Entonces, para HTML, es text / html, para
‫JSON, es application / json,
‫y ahora echemos un vistazo a eso.
‫Recargue el servidor aquí muy rápido
‫y, de hecho, aquí tenemos nuestra API devolviendo todos los datos
‫sobre nuestros cinco productos.
‫Genial, genial y genial, pero en realidad no es perfecto, porque
‫en realidad no es 100%
‫eficiente, y eso se debe a que
‫cada vez que alguien accede a esta ruta /
‫api, el archivo tendrá que leerse y luego enviarse
‫de vuelta. .
‫En cambio, lo que podemos hacer es leer el
‫archivo una vez al principio, y luego, cada vez que alguien
‫llega a esta ruta, simplemente enviar los
‫datos sin tener que leerlos cada vez que un usuario lo solicite.
‫¿Tiene sentido?
‫Bueno, lo que voy a hacer es publicar esto aquí.
‫Está bien, y por supuesto, no necesito todo esto, así que
‫esto no está aquí, y esto no
‫está aquí, y en
‫realidad, será algo diferente, y eso se debe
‫a que ahora usaremos la versión sincrónica, y sé lo
‫que estás pensando, que es que la
‫versión sincrónica bloquea la ejecución del código, ¿verdad?
‫Y si bien eso es cierto, en
‫este caso, no es un problema
‫en absoluto, y eso se debe a que el
‫código de nivel superior en realidad solo se ejecuta una vez desde el principio.
‫Solo esta función de devolución de llamada, por
‫ejemplo, aquí, la de createServer, por lo que esta función aquí, esto
‫es lo que se ejecuta cada vez
‫que hay una nueva solicitud, pero no un código que está aquí.
‫El código que está fuera de las funciones
‫de devolución de llamada, el llamado código de nivel superior, solo se
‫ejecuta una vez que iniciamos el programa, por lo que en
‫esa situación, no importa en absoluto si bloquea
‫la ejecución, porque nuevamente, sucede solo
‫una vez y solo cuando el código realmente comienza, ¿verdad?
‫¿Tiene sentido?
‫Entonces, usaremos la versión de sincronización ahora porque en
‫realidad es más fácil manejar esos datos,
‫porque eso simplemente coloca los datos en una variable que
‫no podemos usar de inmediato.
‫Así que no se preocupe por el hecho de que esta función se está
‫bloqueando porque, nuevamente, está en el código de nivel
‫superior y solo se ejecuta una vez.
‫El secreto aquí es simplemente saber
‫qué código se ejecuta solo una vez y solo
‫al principio, y qué código se ejecuta una y otra vez
‫y, por lo tanto, es problemático al bloquear el bucle de eventos.
‫Y, por supuesto, durante
‫el resto de este gran, gran curso, lo aprenderá.
‫Entonces aprenderá todo sobre el bucle de eventos, y
‫qué código está bloqueando y cuál no, y por qué, y esta
‫es solo la primera vez que lo menciono, pero
‫no será la última vez.
‫Me escucharás decir las mismas cosas una y otra vez.
‫Entonces, simplemente llamando a este dato, y luego, por supuesto, no
‫necesitamos nada de esto.
‫Vamos a mover esto aquí, y eso es todo.
‫Entonces, antes de que suceda algo, leerá los datos
‫del archivo JSON en datos.
‫Luego, también lo analizará en un objeto.
‫Llamémoslo dataObject aquí, por lo que lo que haremos aquí
‫es no leer este archivo cada vez que haya
‫una solicitud y, en su lugar, simplemente
‫enviar de vuelta los datos que tenemos ahora en nuestro código de
‫nivel superior.
‫Entonces, estos datos aquí ahora provienen de aquí porque, por supuesto, este código
‫en la función de devolución de llamada
‫tiene acceso al código de nivel superior debido a la cadena de alcance, ¿verdad?
‫Cancelando, ejecutándose de nuevo y solo para demostrarle
‫que todavía funciona, y lo hace.
‫Tan perfecto, y eso es mejor, eso es más eficiente, oh, ¿y
‫por qué cerré esto?
‫Muy bien, abrámoslo de nuevo muy rápido.
‫Así que, aquí vamos.
‫Entonces esa es nuestra API muy simple, que ahora permite al usuario
‫simplemente solicitar todos los datos sobre nuestra aplicación con
‫una sola llamada a la API, básicamente.
‫Entonces agregamos otra ruta aquí, / api,
‫luego leemos el archivo sincrónicamente, lo
‫colocamos en este objeto y luego simplemente enviamos ese
‫objeto como respuesta, pero antes de eso, especificamos
‫que estamos enviando de vuelta la aplicación / json, entonces que el
‫navegador sabe exactamente qué esperar, y en los próximos videos,
‫comenzaremos a
‫construir la interfaz de usuario, así que
‫esa es la parte más emocionante, ¿verdad?