Bases de datos relacionales y documentales en NodeJS

Pablo Sanabria

Juan Diego Diaz

 CONTENIDO

Node JS + driver 

Node JS + ORM

Node JS + ODM

Driver MySql

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'node_everywhere',
  password : '',
  database : 'web'
});

connection.connect(function(err){
  if(!err) {
    console.log("Database is connected ...");
  } else {
    console.log("Error connecting database ...");
  }
});

connection.query('SELECT * from node_frameworks LIMIT 2', 
function(err, rows, fields) {
    connection.end();
    if (!err)
      console.log('OK: ' + rows);
    else
      console.log('Error while performing Query.');
});

siege

"stress tester"

Pool connections

sudo siege -c100 -t30S http://localhost:3000
var pool      =    mysql.createPool({
    connectionLimit : 100, //important
    host     : 'node_everywhere',
    user     : 'root',
    password : '',
    database : 'web',
    debug    :  false
});

https://npmcompare.com

SEQUELIZE

Transactions
Hooks

Bulking
Migration
Raw queries
Querying
Relations/Associations

(eager loading)

 

npm install express-generator

node_modules/.bin/express . -f --ejs

npm install sequelize sequelize-cli mysql

node_modules/.bin/sequelize init

Mongo DB

  • Base de datos NoSQL
  • Orientado a documentos
  • Open Source
  • Los documentos tienen una estructura basada en JSON

Formas de conexión con NodeJS

  • MongoDB official driver
  • Mongoose

Mongo's Official Driver

Instalación:

npm install mongodb --save
var MongoClient = require('mongodb').MongoClient,
    assert = require('assert');

var url = 'mongodb://localhost:27017/testUC'

function showAllDocuments(db, callback) {
  var collection = db.collection('documents');

  collection.find({}).toArray(function (error, docs) {
    console.log("Found the following records");
    console.log(docs);
    callback(docs);
  })
}

MongoClient.connect(url, function (error, db) {
  assert.equal(null, error);
  console.log("Connection Succesfull");

  showAllDocuments(db, function() {
     db.close();
  });
});

Ejemplo

Mongoose

  • ODM Oriented
  • Depende del driver oficial de MongoDB
  • Código abierto
  • Te permite definir Esquemas para el modelo de datos

Instalación

npm install mongoose --save
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var kittySchema = new Schema( {
  name: String,
  color: String
});

var url = 'mongodb://localhost:27017/testUC'
mongoose.connect(url);

var db = mongoose.connection;

db.once('open', function () {
  var Kitten = mongoose.model('Kitten', kittySchema);

  var fluffy = new Kitten({ name: 'fluffy', color: 'Black' });

  fluffy.save(function (err, fluffy) {
    if (err)
      console.log(err);
    console.log("Save Succesfull");

    Kitten.find(function (err, kittens) {
      kittens.forEach(function (kitten) {
        console.log("{" + kitten.name + ", " + kitten.color + "}");
      })

      db.close();
    });
  })
});

Ejemplo

REFERENCIAS

  • http://docs.sequelizejs.com/en/v3/
  • https://codeforgeek.com/2015/01/nodejs-mysql-tutorial/
  • https://github.com/mysqljs/mysql
  • http://mongodb.github.io/node-mongodb-native/2.2/quick-start
  • http://mongoosejs.com/docs/index.html
  • https://expressjs.com/en/guide/database-integration.html#mongo
  • https://github.com/Automattic/mongoose
  • https://github.com/mongodb/node-mongodb-native

deck

By JUAN DIEGO DIAZ MOSQUERA