npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

dynamodb_aws

v1.0.2

Published

conector dynamodb para node js para uso complementario de mvserver_express

Downloads

201

Readme

dynamodb_aws

Este módulo se destina al uso de nuestro handler de controladores y apis mvserver_express, este módulo se centra en conectar a DynamoDB y elaborar tablas. Este conector te facilita el uso de un CRUD en caso de usar esta base de datos no relacional de AWS.

Documentacion del uso e integracion con el modulo mvserver_express

A continuación te explicaré como podemos integrar este módulo y sus diferentes métodos para poder hacer CRUD. El modulo esta destinado para realizar lambda function en node js, simplifica la logica y disminuye el tiempo de desarrollo en las diferentes acciones, conexiones a base de datos y manejo de errores de tu funcion.

Pasos para la configuracion del MvServer

  • la esructura de tu lambda funcion debe ser la siguiente ve a su Documentación oficial
  • en la raiz de tu espacio de trabajo crear una carpeta con nombre source dentro de esta deberas crear una sub-carpetas con los siguientes nombres
    • source/collector
    • config/config.collector.js
    • config/config.lambda.js
    • config/config.dynamo.js

Los config deben estar estructurados de la siguiente manera

config.collector.js

Este archivo lleva las especificaciones de tu collect, como el modulo de base de datos que vas a usar, la ruta en donde definiras tus collectores,el tipo de base de datos, el nombre del modulo de base de datos y la funcion inicial de tu modulo.

 
const { dynamodb } = require("../../dynamodb_aws/index");
const { ErrorHandler } = require("../dictionary/errors/error-lambda");
const path = require('path');
module.exports = {
    dictionaryError: ErrorHandler,
    PATHCOLLECTOR: path.join(__dirname, '../source/collector'),
    type: "db",
    db: "dynamodb",
    module: function () {
        return dynamodb()
    }

}

config.lambda.js

Aqui colocaras tu cors en caso de llevar y los metodos que estaras manejando en tu lambda

 
module.exports = {
    cors_api: "localhost",
    methods: "OPTIONS,POST,GET,PUT"

}

config.dynamo.js

esta parte esta la parammetrizacion de tu base de datos, este ejemplo es con el modulo oficial de mongodb para mvserver

module.exports = {
    user: process.env.USER_DYN,
    password: process.env.PASSWORD_DYN,
    region: process.env.REGION
}

Se manjan las variables de entorno en este caso, tambien podrias manejar los kms en aws para guardar estos keys como gustes.

source/collector

Aqui tendras la lista de conectores y las acciones que quieres hacer en tu api

const config = require('../../config/config.dynamodb');

const serverdb = {
    user: config.user,
    password: config.password,
    region: config.region,
    table: "users"
};

const schemaUsers = {
    name: { type: String, require: true },
    id_user:{type: String, require: true},
    type: { type: String, require: true }
};



fastserver.collector("collector-add-users", {
    type: "db",
    action: "dynamodb",
    server: serverdb,
    queryType: "add",
    schema: {}
}); 

Parámetros de configuración

A continuación se describe el uso de cada uno de los parámetros en la configuración:

1. type: "db"

  • Descripción: Define el tipo de servicio con el que estamos trabajando. En este caso, "db" indica que se está trabajando con una base de datos.
  • Ejemplo: "db"

2. action: "dynamodb"

  • Descripción: Especifica la acción que se realizará con la base de datos. En este caso, "dynamodb" indica que se va a realizar una operación con DynamoDB, el servicio de base de datos no relacional de AWS.
  • Ejemplo: "dynamodb"

3. server: serverdb

  • Descripción: Contiene la configuración del servidor de la base de datos. Este objeto define las credenciales, la región y la tabla de DynamoDB a la que se realizará la conexión.
  • Ejemplo:
    serverdb = {
        user: "your-aws-access-key",
        password: "your-aws-secret-key",
        region: "us-east-1",  // Región de AWS
        table: "your-table-name"  // Nombre de la tabla en DynamoDB
    }

4. queryType: "add"

  • Descripción: Define el tipo de operación que se realizará en DynamoDB. En este caso, "add" indica que se está realizando una operación de inserción de datos en la base de datos.
  • Ejemplo: "add"

5. schema: {}

  • Descripción: Contiene la estructura o esquema de los datos que se van a insertar, actualizar o consultar en la base de datos. Este parámetro se utiliza para validar los datos antes de que sean procesados.
  • Ejemplo:
    schema = {
        name: { type: String, required: true },
        age: { type: Number, required: true }
    }
  • Nota: El esquema define los campos que deben estar presentes en los datos y sus tipos, si colocas el schema en blanco {} el mismo no validara los valores nio tipos de datos.

los diferentes comando para el QueryType son:

  • add: Agregar nuevo item
  • delete: borrar un item por si primary_key
  • get: obtine un valor en especifico por su primary
  • scan: Muestra todos los registros en la db
  • update: Actualiza campos de una tabla
  • query: se utiliza para realizar consultas específicas en una tabla o índice secundario, basándose en el valor de una clave primaria (Primary Key). Este método es ideal para recuperar elementos cuando tienes una Partition Key específica, y opcionalmente, puedes usar una Sort Key para filtrar aún más los resultados.

Observacion

El metodo update maneja una estrcutura para poder hacer el cambio de cualquier informacion

 ```javascript
            {
            "filter":{"bussinesid":"VK4bUns21XTC45raf4kDH4DlyRT2"},// id primary key definido en tu tabla de dynamodb
            "UpdateExpression":"set #name_bussines = :name_bussines", // Ejemplo: "set #status = :status"
            "ExpressionAttributeNames":{
                "#name_bussines": "name_bussines" // Ejemplo: { "#status": "status" }
            },
            "ExpressionAttributeValues":{
                ":name_bussines": "X-SMART-DEVELOP" // { ":status": "Active" }
            }
        }
   ```

Metodo query

El método Query en DynamoDB se utiliza para realizar consultas específicas en una tabla o índice secundario, basándose en el valor de una clave primaria (Primary Key). Este método es ideal para recuperar elementos cuando tienes una Partition Key específica, y opcionalmente, puedes usar una Sort Key para filtrar aún más los resultados.

Características principales de Query:

  • Búsqueda eficiente:

Query solo escanea los datos dentro de una partición específica, lo que lo hace mucho más eficiente que el método Scan, que recorre toda la tabla. Claves necesarias: 1. Requiere una Partition Key (obligatoria). 2. Puede incluir una condición adicional con la Sort Key (si la tabla tiene una Sort Key definida).

  • Filtros adicionales:

Puedes aplicar filtros (FilterExpression) para afinar los resultados que ya cumplieron con la consulta principal. Nota: Los filtros no afectan el rendimiento porque la base de datos primero evalúa la KeyConditionExpression y luego aplica los filtros. Índices secundarios:

Puedes usar el método Query no solo en la tabla principal, sino también en Índices Secundarios Locales (LSI) o Índices Secundarios Globales (GSI) para realizar consultas alternativas basadas en diferentes combinaciones de atributos.

El modelo que le pasarias seria algo como esto

 ```javascript
       {
            KeyConditionExpression: message.KeyConditionExpression, // Ejemplo: "bussinesid = :bussinesid"
            ExpressionAttributeValues: message.ExpressionAttributeValues, // Ejemplo: { ":bussinesid": "VK4bUns21XTC45raf4kDH4DlyRT2" },
            ExpressionAttributeNames: message.ExpressionAttributeNames || undefined, // Opcional, si se necesita mapear nombres de atributos
            FilterExpression: message.FilterExpression || undefined, // Opcional, para filtrar los resultados
            Limit: message.Limit || undefined, // Opcional, para limitar el número de resultados
            ScanIndexForward: message.ScanIndexForward !== undefined ? message.ScanIndexForward : true // Orden ascendente o descendente (true por defecto)
        }
        
   ```