Capítulo 9: Guardando tu artículo
Mini desafío #1
Last updated
Was this helpful?
Mini desafío #1
Last updated
Was this helpful?
Ahora mismo, tus preciosos artículos no se están guardando en ninguna parte, lo que es un poco embarazoso. Vamos a hacer algo para remediarlo.
Notarás que en la carpeta "data" hay un archivo nuevo llamado posts.json
.
JSON es un tipo de archivo para estructurar datos en un formato legible. También es un formato muy popular para mandar datos a través de internet.
JSON es la representación en string(cadena de texto) de un objeto Javascript. Los objetos JSON se convierten de forma muy sencilla a objetos javascript, y viceversa, con JSON.parse()
y JSON.stringify()
.
(Si no te sientes segura con los objetos Javascript, habla con tu mentora o con una compañera.)
Si miras en posts.json verás que ya hay un artículo. El formato es:
Hemos usado timestamp como la clave para que los artículos se listen en orden cronológico. También registra la fecha de creación.
Para hacer un timestamp basta con hacer:
Puedes leer más sobre timestamps en JavaScript en el siguiente artículo de .
Cada vez que un artículo llegue al servidor, queremos almacenar los datos en el disco duro de tu ordenador. Para hacer esto, necesitamos un módulo incorporado en NodeJs: fs
, file system.
Los módulos incorporados de NodeJs (módulos del core) son parecidos a las funciones middleware incorporadas de express. La única diferencia es que mientras que necesitas tener instalado Express para usar sus funciones middleware, las funciones core vienen automáticamente con NodeJs.
Para usar fs
, necesitamos hacer require en tu servidor:
El método que necesitamos para escribir en tu disco duro es fs.writeFile
Vamos a echar un vistazo más detallado.
fs.writeFile
usa 3 argumentos:
Argumento 1: La localización del archivo en el que quieres escribir
Argumento 2: Los datos que quieres escribir
Argumento 3: la función callback
Reemplaza 'location-of-your-file-goes-here'
con la dirección actual del archivo donde quieres escribir. Si no existe, fs.writeFile
creará uno. Ya tenemos posts.json
, asi que no hay de qué preocuparse.
Para leer datos que ya existen, usarías fs.readFile
. La forma en la que usas fs.readFile
es muy similar a fs.writeFile
Argumento 1: La localización del archivo en el que quieres leer
Argumento 2: la función callback
Habrás notado que ls función de callback de fs.readFile
tiene un segundo argumento, archivofile
. Ese argumento es el archivo que quieres leer.
Vamos a leer los datos de posts.json
. Asegúrate de hacer require
de fs
.
Añade este código a tu servidor (debajo de los require
)
__dirname
es un objeto global de Node que te da la ruta a tu directorio raíz actual. es útil cuando queremos evitar escribir rutas dinámicas o largas.
Si reinicias el servidor deberias ver algo así:
Este es el contenido de posts.json
, pero en un formato llamado buffer. Para hacerlo legible para los humanos, vamos a convertirlo a string:
El archivofile
está en formato JSON ahora mismo. Si queremos acceder a los artículos que se encuentran dentro del mismo, necesitamos convertirlo de formato JSON a un objeto de Javascript.
Añade este fragmento de código en tu función callback fs.readFile
.
Ahora la variable parsedFile es un objeto normal de JavaScript, y podemos acceder a los datos que hay dentro.
Hemos hablado de JSON y hemos hablado sobre cómo leer y escribir archivos. ¡Ahora tienes los poderes para salvar nuevos artículos a tu disco duro! Trabaja en equipo y con una mentora para ver si puedes hacer los siguientes pasos tú sola.
Aquí tienes una guía de lo que tienes que conseguir:
Cuando los datos de un artículo nuevo lleguen, lee posts.json
para acceder a su contenido.
Añade tu nuevo artículo junto a los demás. Para cada artículo, usa un timestamp como la clave, y los datos como el valor.
Escribe los datos combinados de vuelta al archivo posts.json
.
fs.writeFile()
normalmente sobreescribe el archivo con los datos que le pases. Es probable que no quieras perder todos tus datos antiguos cada vez que llegue uno nuevo, asi que piensa en como combinar fs.readFile()
y fs.writeFile()
para prevenir la sobreescritura.
Necesitarás convertir varias veces de JSON a JavaScript y viceversa. JSON.parse()
convierte de JSON a objetos Javascript. JSON.stringify()
hace el opuesto. Úsalos para el desafío.
Ah, para obtener un timestamp del momento actual, usa el método de JavaScript Date.now()
¡Buena suerte! Cuando acabes avanza al paso 10.