M101JS – Semana 1

*estos son mis apuntes, no pretende ser una guia. Comentarios a @m_minguezz

¿Que es MongoDB?

es una base de datos no relacional para documentos JSON, en JSON (Javascript Object Notacion) los datos se repesentan por nombre valor
{“a”:4, “b”:7}

MongoDB es “Schemaless”, dos documentos no tienen por que tener la misma estructura.

MongoDB es escalable y funcional, no soporta relaciones y no tiene transacciones

Creamos /data/db/ y le damos permisos 777 e instalamos MongoDB

Para instalar MongoDB podemos ir a la documentación oficial: Instalación de MongoDB en linux.

Iniciamos MongoDB con “mongod” y entramos (desde otra terminal) en la shell com “mongo”

Para probar que funciona podemos probar en la shell con:
db.people.insert({‘name’:’Pepe’})
db.people.find()

ver un poco mas en la consola de mongo con comandos como
show dbs
use prueba
db.cosas.insert({‘a’:1,’b’:2,’c’:3})
db.cosas.find().pretty()
[…]
MongoDB Shell Cheat Sheet

Para saber mas de como son los archivos JSON podemos consultar la documentación en la pagina oficial.

Instalamos Nodejs

Como hacer los ejemplos del curso

Para seguir el curso usamos “npm install package.json” para instalar los modulos de Nodejs que necesitamos para hacer los ejemplos.

Ejemplo de package.json

{
  "name": "hw1-3",
  "version": "0.0.0",
  "description": "Homework 1.3",
  "main": "app.js",
  "dependencies": {
    "consolidate": "~0.9.1",
    "crypto": "~0.0.3",
    "express": "~3.3.4",
    "mongodb": "~1.3.11",
    "swig": "~0.14.0"
  },
  "author": "You",
  "license": "BSD",
  "private": true
}

“Hola mundo” con express

Crea archivo app.js con el siguiente contenido

// expres biblioteca para enrutamiento y otras cosas, basado en Connect.
var express = require('express'), // referencia
// consolidate 
	app = express(); // crear instancia
// end consolidate

//crear controlador de ruta req-> solicitud, res-> respuesta
app.get('/', function (req, res) {
	// render
	res.send("Hola Mundo");
	// end render
});
app.get('*', function (req, res) {
        res.send('La pagina '+req.params+' que buscas no existe', 404);
        console.log(req);
});

//mongoopen

// nuestra app escucha en el puerto 8080
app.listen(8080);
// creamos un mensaje para indicar que se inicio el servidor
console.log("Servidor express iniciado en puerto 8080");
//end mongoopen

Instalamos express “npm install express”, ahora ejecutamos node app.js y podremos ver la salida en “http://localhost:8080”, para cualquier ruta usamos el comodin “*” para que nos devuelva un error 404.

Ahora vamos a ver como podemos enviar plantillas HTML.
Vamos a crear directorio para nuestras vistas y un archivo html, “views/hola.html”, con el siguiente contenido:

<html>
<head>
    <title>Hola</title>
</head>
<body>
    <!-- {{name}} es una sintaxis del motor de plantillas que vamos a usar-->
    <h1>Hola con {{name}}</h1>
</body>
</html>

Vamos a usar “consolidate” que es una libreria que basicamente nos da un conjunto de envolturas y swig es el motor de plantillas.
En “app.js” cambiaremos donde tenemos el comentario “// consolidate” hasta “// end consolidate” por:

	app = express(),
	cons = require('consolidate');
	//mongodb

app.engine('html', cons.swig); // configuramos el modulo 'html' de swig, usando consolidate para poder integrarlo directamente con express
app.set('view engine', 'html'); // registramos el motor de vistas para express
app.set('views', __dirname + "/views"); // Decimos donde debe buscar las plantillas

Ahora le diremos la vista que tiene que renderizar, cambiando en app.js desde // render hasta // end render

	//mongoclient
	res.render('hola', { 'name' : 'Swig'});
	// end mongoclient

Antes de probarlo necesitamos instalar consolidate y swig

	npm install consolidate
	npm install swig

Añadiendo MongoDB

Añadimos el cliente y el servidor de MongoDB donde esta el comentario “//mongodb”

	MongoClient = require('mongodb').MongoClient,
	Server = require('mongodb').Server;

a que nos vamos a conectar //mongoclient hasta // end mongoclient

	var mongoclient = new MongoClient(new Server('localhost', 27017,{'native_parse' : true})); // información de nuestra conexión
	var db = mongoclient.db('course');
	app.get('/', function(req, res){
		db.collection('hola_mongo_express').findOne({}, function(err, doc){
			res.render('hola', doc);
	})
	});

y la conexion en //mongoopen hasta //end mongoopen

	mongoclient.open(function(err, mongoclient){
		app.listen(8080);
		// creamos un mensaje para indicar que se inicio el servidor
		console.log("Servidor express iniciado en puerto 8080");
});

Siempre que tengamos “err” deberiamos tratar el error

if (err) throw err;

Para que funcione tenemos que tener una base de datos ‘course’ con una entrada con el valor ‘nombre’ que es usado en nuestra plantilla.