megafs.db
Manejador de archivos JSON simulando una base de datos.
Instalación:
npm install megafs.db --save
Tabla de Contenidos
Changelog
- 1.1.2 Se arregló algunos errores del README.md
Introducción
megafs.db usa archivos JSON para almacenar datos de una manera rapida, sencilla y persistente.
Antes de usar megafs.db se recomienda tener conocimiento sobre los objetos.
Documentación
A continuación está la documentación de megafs.db. Para poder explicar de mejor manera la documentación, se asumirá que usted tiene definido a megafs.db así:
const DB = ;
Storage
options;
Este constructor inicializa la base de datos.
Parametro | Tipo | Opcional | Descripción |
---|---|---|---|
options |
Object | No | Un objeto con propiedades. |
options.name |
String | No | El nombre de la base de datos, si el archivo no existe, este sera creado en el directorio especificado en options.path. |
options.path |
String | No | El directorio/ruta donde se buscará o creará el archivo que se especificó en options.name. |
options.rrt |
Boolean | Si | Si quieres que el archivo se lea en tiempo real o no, true para activar y false para desactivar (default: false). Si esta propiedad está en false, los datos leidos y los nuevos datos almacenados se guardaran tambien en memoria para que la base de datos (JSON) no se tenga que leer cada vez que se hace una peticion de lectura a este (recomendable para una mejor flexibilidad y rendimiento). Si esta propiedad está en true se leerá en tiempo real la base de datos (JSON) (recomendable si editas el JSON mediante algo externo) |
Ejemplos
const DB = ; let level_db = name: 'niveles' //Busca o crea el archivo niveles.json en el directorio puesto en path path: __dirname //A la misma altura donde se encuentra este archivo; //rrt = false por default//
const DB = ; let level_db = name: 'niveles' //Busca o crea el archivo niveles.json en el directorio puesto en path path: './database' //En una carpeta llamada database rrt: true //Que se lea en tiempo real el archivo niveles.json;/* Ejemplo del directorio: [+] database [-] niveles.json*/
@ Valor de Retorno ── Una clase con los métodos que se verán a continuación.
Storage#build
Storage;
Este metodo te permite guardar un objeto en la propiedad indicada en clave.
Parametro | Tipo | Opcional | Descripción |
---|---|---|---|
clave |
String | No | Un string indicando en que propiedad se guardara el objeto, si la propiedad no existe, se creará, de lo contrario el objeto no será creado pero devolvera los datos que contiene actualmente dicha propiedad (solo se creará si la propiedad no existe), puedes usar el simbolo del punto . para acceder a propiedades anidadas, este simbolo puede se cambiado en split. |
objeto |
Object | No | Un Objeto que se almacenara en la propiedad especificada en clave. |
split |
String | Si | El simbolo que se usará para acceder a propiedades anidadas, por default es un punto . |
Ejemplo
const DB = ; //Ejemplo #1let level_db = name: 'niveles' path: __dirname ; let objeto_creado = level_db; console; // {password: 'dadadudu', medallas: []} //Ejemplo #2let nuevo_objeto = level_db; console; // {xp: 0, nivel: 1} /*Estructura actual de niveles.json: { 'megastar': { 'password': 'dadadudu', 'medallas': [], 'datos': { 'xp': 0, 'nivel': 1 } }}*/
@ Valor de Retorno ── El objeto creado, de lo contrario el objeto existente.
Storage#get
Storage;
Este metodo te permite obtener el valor de una propiedad anteriormente guardada.
Si el valor de la propiedad es un objeto, el valor de retorno será ese objeto instanciado en la clase ObjectUtils (podras usar sus metodos directamente), si la propiedad no existe regresará undefined.
Parametro | Tipo | Opcional | Descripción |
---|---|---|---|
clave |
String | No | Un string indicando la propiedad a la que quieres acceder y obtener su valor, puedes usar el simbolo del punto . para acceder a propiedades anidadas, este simbolo puede se cambiado en split. |
split |
String | Si | El simbolo que se usará para acceder a propiedades anidadas, por default es un punto . |
Ejemplo
const DB = ; let eco_db = name: 'economia' path: __dirname ; let objeto_creado = eco_db; let ratsagem_dinero = eco_db; //Regresa un numero.console; //6let mario_dinero = eco_db; //Regresa undefined.console; //undefined let usuarios = eco_db; //Regresa un objeto con el metodo save() instanciado en la clase ObjectUtilsconsole; //{MegaStar: 50, ModeR: 20, ...}console; //['MegaStar: 50', 'MoDeR: 20', ...]let top_users = usuarios;console;/*{ MegaStar: 50, Marcelo: 46, MoDeR: 20, ratsagem: 5} usuarios.partition()...usuarios.filter()...usuarios.find()...etc...*/
@ Valor de Retorno ── El valor obtenido, si el valor es un objeto, el objeto obtendrá un metodo save
y una instancia de la clase ObjectUtils (solo si es un objeto, de lo contrario no reibirá nada), unicamente regresará undefined si no se encontró nada (la propiedad de clave no existe)
Objeto#save()
Objeto;
Sirve para guardar o actualizar datos en la base de datos. Sólo funciona si el valor de retorno del método Storage#get es un objeto.
Ejemplo
const DB = ; let info_db = name: 'perfil' path: __dirname ; let objeto_creado = info_db; //Ejemplo #1let usuario = info_db;usuariopuntos += 1;usuarioamigos;usuario;/*Estructura actual de perfil.json:{ 'MegaStar': { 'puntos': 1, 'amigos': ['MoDeR'], 'info': { 'texto': 'Hola mundo', 'medallas': 0 } }}*/ //Ejemplo #2let usuario_info = info_db;usuario_infotexto = 'Que miras.';usuario_infomedallas += 40;usuario_info;/*Estructura actual de perfil.json:{ 'MegaStar': { 'puntos': 1, 'amigos': ['MoDeR'], 'info': { 'texto': 'Que miras.', 'medallas': 40 } }}*/
@ Valor de Retorno ── Retorna los datos actualizados.
Storage#has
Storage;
Este metodo te permite verificar si existe o no una propiedad especifica en la base de datos.
Parametro | Tipo | Opcional | Descripcion |
---|---|---|---|
clave |
String | No | Un string indicando la propiedad a verificar, puedes usar el simbolo del punto . para acceder a propiedades anidadas, este simbolo puede se cambiado en split. |
split |
String | Si | El simbolo que se usará para acceder a propiedades anidadas, por default es un punto . |
Ejemplo
const DB = ; let info_db = name: 'perfil' path: __dirname ; let objeto_creado = info_db; console; //Retorna trueconsole; //Retorna trueconsole; //Retorna trueconsole; //Retorna falseconsole; //Retorna false
@ Valor de Retorno ── true si existe, de lo contrario false.
Storage#delete
Storage;
Este metodo te permite eliminar una propiedad especifica de la base de datos.
Parametro | Tipo | Opcional | Descripcion |
---|---|---|---|
clave |
String | No | Un string indicando la propiedad a eliminar, puedes usar el simbolo del punto . para acceder a propiedades anidadas, este simbolo puede se cambiado en split. |
split |
String | Si | El simbolo que se usará para acceder a propiedades anidadas, por default es un punto . |
Ejemplo
const DB = ; let info_db = name: 'perfil' path: __dirname ; let objeto_creado = info_db; let eliminado = info_db;console; //retorna truelet no_eliminado = info_db;console; //retorna undefined ya que 'datos' no existe en MegaStar /*Estructura actual de perfil.json:{ 'MegaStar': { 'puntos': 1, 'amigos': ['MoDeR'] }}*/
@ Valor de Retorno ── true si se elimino correctamente, de lo contrario undefined.
Storage#allData
Storage;
Este metodo te permite obtener todos los datos de la base de datos.
Ejemplo
const DB = ; let info_db = name: 'perfil' path: __dirname ; let datos = info_db;console; // {'MegaStar': {puntos: 1, amigos: ['MoDeR']}}
@ Valor de Retorno ── Todo el objeto de la base de datos.
ObjectUtils
objeto;
Este constructor permite usar metodos especiales a un objeto.
Parametro | Tipo | Opcional | Descripción |
---|---|---|---|
objeto |
Object | No | Un objeto. |
Ejemplos
const DB = ; let obj = MegaStar: 5 MoDeR: 3 ratsagem: 4; let usuarios = obj; let obj_2 = MegaStar: xp: 0 nivel: 4 MoDeR: xp: 0 nivel: 2 ratsagem: xp: 0 nivel: 7 let usuarios_2 = obj_2;
@ Valor de Retorno ── Una copia del objeto con los métodos que se verán a continuación.
ObjectUtils#keys
ObjectUtils;
Este metodo te permite obtener todas los nombres de las propiedades del objeto, igual a Object.keys
Ejemplo
console; //['MegaStar', 'MoDeR', 'ratsagem']
@ Valor de Retorno ── Un Array que contiene el nombre de las propiedades del objeto.
ObjectUtils#values
ObjectUtils;
Este metodo te permite obtener todos los valores de todas las propiedades del objeto, igual a Object.values
Ejemplo
console; //[5, 3, 4]
@ Valor de Retorno ── Un Array que contiene los valores de las propiedades del objeto.
ObjectUtils#sort
ObjectUtils;
Este metodo te permite ordenar las propiedades del objeto, similar a Array.sort
Parametro | Tipo | Opcional | Descripcion |
---|---|---|---|
compareFunction |
Function | Si | Una funcion que define el orden del objeto, si no se pasa ninguna funcion se ordenará segun el valor unicode de cada carácter mediante la conversion a string de cada elemento. |
Ejemplo
console;/* { MegaStar: 5, ratsagem: 4, MoDeR: 3 }*/ console; //lo ordenamos mediante la propiedad nivel/* { ratsagem: {xp: 0, nivel: 7}, MegaStar: {xp: 0, nivel: 4}, MoDeR: {xp: 0, nivel: 2} }*/
@ Valor de Retorno ── Un Objeto ordenado.
ObjectUtils#filter
ObjectUtils;
Este metodo te permite obtener unicamente las propiedades que cumplan la condicion del callback, similar a Array.filter
Parametro | Tipo | Opcional | Descripcion |
---|---|---|---|
callback |
Function | No | Una funcion que comprobará cada propiedad del objeto para ver si se cumple o no la condicion, acepta 2 parametros. |
currentValue |
* | No | El valor de la propiedad actual que está siendo procesado. |
currentKey |
String | Si | El nombre de la propiedad actual que está siendo procesado. |
Ejemplo
console; //Solo los que son menor a 4/* { MoDeR: 3 }*/ console //Solo los que son mayor a 2/* { ratsagem: {xp: 0, nivel: 7}, MegaStar: {xp: 0, nivel: 4} }*/
@ Valor de Retorno ── Un Objeto con las propiedades que cumplieron la condicion del callback.
ObjectUtils#map
ObjectUtils;
Este metodo te permite crear un array con los resultados de la funcion indicada en el callback, similar a Array.map
Parametro | Tipo | Opcional | Descripcion |
---|---|---|---|
callback |
Function | No | Una funcion que se ejecutará sobre cada propiedad del objeto. |
currentValue |
* | No | El valor de la propiedad actual que está siendo procesado. |
currentKey |
String | Si | El nombre de la propiedad actual que está siendo procesado. |
Ejemplo
console; //'v' es el valor y 'k' la clave de la propiedad actual que está siendo procesado. /* [ 'nombre de la propiedad: MegaStar, valor de la propiedad: 5', 'nombre de la propiedad: MoDeR, valor de la propiedad: 3', 'nombre de la propiedad: ratsagem, valor de la propiedad: 4' ]*/ console;/* [ 'nombre: MegaStar, Nivel: 4', 'nombre: MoDeR, Nivel: 2', 'nombre: ratsagem, Nivel: 7' ]*/
@ Valor de Retorno ── Un Array con los elementos evaluados en el callback.
ObjectUtils#size
ObjectUtilssize;
Este metodo te permite obtener la cantidad de propiedades que hay en el objeto.
Ejemplo
console//3
@ Valor de Retorno ── Un numero que indica la cantidad de propiedades que hay en el objeto.
ObjectUtils#find
ObjectUtils;
Este metodo te permite buscar una propiedad especifica en el objeto, similar a Array.find
Parametro | Tipo | Opcional | Descripcion |
---|---|---|---|
callback |
Function | No | Una funcion que comprobará cada propiedad del objeto para ver si se cumple o no la condicion, acepta 2 parametros. |
currentValue |
* | No | El valor de la propiedad actual que está siendo procesado. |
currentKey |
String | Si | El nombre de la propiedad actual que está siendo procesado. |
Ejemplo
console; //undefinedconsole; //4console; //4 console // {xp: 0, nivel: 4}
@ Valor de Retorno ── El valor de la primera propiedad que cumplió la condicion del callback, de lo contrario undefined.
ObjectUtils#findKey
ObjectUtils;
Este metodo te permite buscar el nombre de una propiedad especifica en el objeto, similar a Array.findIndex pero retorna el nombre de la propiedad en lugar del indice posicional.
Parametro | Tipo | Opcional | Descripcion |
---|---|---|---|
callback |
Function | No | Una funcion que comprobará cada propiedad del objeto para ver si se cumple o no la condicion, acepta 2 parametros. |
currentValue |
* | No | El valor de la propiedad actual que está siendo procesado. |
currentKey |
String | Si | El nombre de la propiedad actual que está siendo procesado. |
Ejemplo
console; //undefinedconsole; //MoDeR console //ratsagem
@ Valor de Retorno ── El nombre de la primera propiedad que cumplió la condicion del callback, de lo contrario undefined.
ObjectUtils#partition
ObjectUtils;
Este metodo divide el objeto en dos objetos, donde el primer contiene las propiedades que cumplieron con la condicion del callback y el segundo objeto con las propiedades que no la cumplieron.
Parametro | Tipo | Opcional | Descripcion |
---|---|---|---|
callback |
Function | No | Una funcion que comprobará cada propiedad del objeto para ver si se cumple o no la condicion, acepta 2 parametros. |
currentValue |
* | No | El valor de la propiedad actual que está siendo procesado. |
currentKey |
String | Si | El nombre de la propiedad actual que está siendo procesado. |
Ejemplo
let alto bajo = usuarios;consoleconsole/*alto: { MegaStar: 5 } bajo: { MoDeR: 3, ratsagem: 4 }*/ let nombres_m nombres_no_m = usuarios_2; //Los que comienzan con Mconsoleconsole/*nombres_m: { MegaStar: {xp: 0, nivel: 4}, MoDeR: {xp: 0, nivel: 2} } nombres_no_m: { ratsagem: {xp: 0, nivel: 7} }*/
@ Valor de Retorno ── Un Array que contiene dos objetos, el primero objeto contiene las propiedades que cumplieron con la condicion del callback, mientras que el segundo objeto con las que no la cumplieron.
ObjectUtils#some
ObjectUtils;
Este metodo verifica si existe una propiedad que cumpla con la condicion del callback, similar a Array.some
Parametro | Tipo | Opcional | Descripcion |
---|---|---|---|
callback |
Function | No | Una funcion que comprobará cada propiedad del objeto para ver si se cumple o no la condicion, acepta 2 parametros. |
currentValue |
* | No | El valor de la propiedad actual que está siendo procesado. |
currentKey |
String | Si | El nombre de la propiedad actual que está siendo procesado. |
Ejemplo
console; //falseconsole; //true console //true
@ Valor de Retorno ── true si al menos una propiedad cumplió con la condicion del callback, de lo contrario false.
ObjectUtils#random
ObjectUtils;
Este metodo te permite obtener una cantidad especifica de propiedades seleccionadas aleatoriamente.
Parametro | Tipo | Opcional | Descripcion |
---|---|---|---|
n |
Number | Si | El numero de propiedades aleatorias que se obtendrá, por default es 1 y si el numero es mayor a la cantidad de propiedades que actualmente tiene el objeto, el valor del numero sera puesto en la cantidad de propiedades existentes. |
Ejemplo
console
@ Valor de Retorno ── Un objeto con las propiedades seleccionadas aleatoriamente.
FileSyncData
path nombre;
Este constructor permite leer archivos JSON y guardar datos de una forma sincrona.
Parametro | Tipo | Opcional | Descripción |
---|---|---|---|
path |
String | No | El directorio/ruta donde se buscará el archivo que se especificó en nombre. |
nombre |
String | No | El nombre del .JSON que se encuentra especificado en path. |
Ejemplos
const DB = ; let start = __dirname 'niveles'; //No hace falta colocar el .json
@ Valor de Retorno ── Una clase con los métodos que se verán a continuación.
FileSyncData#readData
FileSyncData;
Este metodo inicia la lectura del archivo .json que se especificó en el constructor FileSyncData.
El contenido del .json debe ser un objeto.
Ejemplo
let db_data = start;
@ Valor de Retorno ── Los datos del archivo json listo para ser usados.
FileSyncData#saveData
FileSyncData;
Este metodo guarda el nuevo_objeto en el archivo que se especificó en el constructor FileSyncData.
Parametro | Tipo | Opcional | Descripcion |
---|---|---|---|
nuevo_objeto |
Object | No | El nuevo objeto que será puesto en el .json. |
Ejemplo
let db_data = start;if!db_data'MegaStar' db_data'MegaStar' = xp: 0 nivel: 1 else db_data'MegaStar'xp += Math + 1 //supongamos que sale 3 start; /*Estructura actual de niveles.json: { 'MegaStar': { 'xp': 3, 'nivel': 1 } }*/
@ Valor de Retorno ── Nada.
Notas
Cuando ocurra un error se lanzará una excepcion especifica (throw) indicando el motivo del fallo.
Los constructores FileSyncData y ObjectUtils son de libre uso, puedes usarlos independientemente de si usas o no el constructor Storage