Estás en:   ArielOrtiz.info > Desarrollo de aplicaciones web > Laboratorio 8: Utilizando Mongoose

Laboratorio 8: Utilizando Mongoose

Objetivos

Durante esta práctica, los alumnos serán capaces de:

Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad de resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.

Descripción de la actividad

NOTA IMPORTANTE: Las actividades de la práctica se pueden elaborar de manera individual o en parejas. El reporte de la práctica de laboratorio debe ser desarrollado de manera individual.

  1. Instala MongoDB en tu sistema. Desde la terminal teclea lo siguiente:

    sudo apt-get install mongodb

    El servidor de MongoDB queda funcionando después de ser instalado y también cada vez que se reinicie Linux. Los siguientes comandos desde la terminal permiten detener, echar a andar y reiniciar, respectivamente, el servidor de MongoDB:

    sudo service mongodb stop
    sudo service mongodb start
    sudo service mongodb restart
  2. Crea una nueva aplicación web de Express llamada lab8. Esta aplicación será la fachada para una base de datos sobre lenguajes de programación.

    Antes de correr npm install agrega al archivo package.json las siguientes dependencias:

    • express-ejs-layouts: ~1.1.0
    • mongoose: ~3.8.17

    Realiza los ajustes correspondientes en el archivo app.js para poder utilizar el módulo express-ejs-layouts.

  3. Agrega al final del archivo app.js las siguientes instrucciones para poder establecer una conexión con la base de datos llamada lab8 en el servidor local de MongoDB:

    var mongoose = require('mongoose');
    
    mongoose.connect('mongodb://localhost/lab8');
    
    mongoose.connection.on('open', function () {
      console.log('Connected to Mongoose');
    });
    
    mongoose.connection.on('error', function (err) {
      console.log('Mongoose error. ' + err);
    });
    
  4. Crea el subdirectorio lab8/models y coloca ahí un archivo llamado lenguaje.js con el siguiente contenido:

    // Archivo: lab8/models/lenguaje.js
    
    'use strict';
    
    var mongoose = require('mongoose');
    
    var esquemaLenguaje = mongoose.Schema({
      nombre:   String,
      fecha:    Number, // Año en el que fue creado el lenguaje
      autor:    String
    });
    
    esquemaLenguaje.methods.edad = function () {
      return new Date().getFullYear() - this.fecha;
    };
    
    module.exports = mongoose.model('Lenguaje', esquemaLenguaje);
    

    Este archivo define el esquema de los documentos que se almacenarán en la base de datos. Concretamente se define un modelo llamado Lenguaje que tiene tres campos: nombre, fecha y autor. El modelo también cuenta con un método llamado edad().

    Para utilizar el modelo Lenguaje se debe primero importar el módulo correspondiente. En el código del controlador (routes/index.js):

    var Lenguaje = require(__dirname + '/../models/lenguaje.js');

    Para crear una instancia del modelo:

    var bf = new Lenguaje({ nombre: 'Brainfuck', fecha: 1993, autor: 'Urban Müller'});
    

    Para guardar dicha instancia en la base de datos:

    bf.save(function (err, obj) {
      if (!err) console.log(obj.nombre + ' ha sido guardado');
    });
    

    Para leer de la base de datos todos los documentos del modelo Lenguaje:

    Lenguaje.find(function (err, lenguajes) {
      if (!err) console.log(lenguajes);
    });
    

    La siguiente liga contiene una introducción más completa sobre el uso de Mongoose: Quick Start.

    Verifica desde el shell de MongoDB que la información se esté guardando en la base de datos. Desde la terminal teclea:

    mongo

    Dentro del shell de MongoDB, indica la base de datos que deseas inspeccionar:

    use lab8

    Ahora despliega todos los documentos contenidos en la colección de lenguajes:

    db.lenguajes.find()

    Si deseas conocer un poco más sobre el uso del shell de MongoDB, la siguiente liga es una buena introducción: Getting Started with MongoDB Development.

  5. Completa la aplicación web para que funcione tal como se describa a continuación.

    Al acceder desde un navegador con la liga:

    http://localhost:3000

    debe aparecer una página con dos ligas como se muestra aquí:

    Si el usuario selecciona la liga “Dar de alta un nuevo lenguaje”, entonces debe aparecer la siguiente página con un formulario:

    El usuario debe capturar la información solicitada y presionar el botón “Añadir”. En ese momento se debe efectuar una petición de tipo POST que almacene los datos del formulario en la base de datos de MongoDB usando Mongoose. En cuanto se terminen de guardar los datos se debe hacer un redirect a otra página como la que se muestra aquí:

    Realiza un “reload” de esta página para verificar que se hizo correctamente el redirect. El navegador no debe presentar ninguna ventana de diálogo indicando que se duplicará una petición de tipo POST.

    Usa tu interfaz para capturar los siguientes datos:

    C, 1972, Dennis Ritchie
    C#, 2000, Anders Hejlsberg
    C++, 1983, Bjarne Stroustrup
    Clojure, 2007, Rich Hickey
    Cobol, 1959, Grace Hopper
    Fortran, 1957, John Backus
    Go, 2009, Rob Pike
    Java, 1995, James Gosling
    JavaScript, 1995, Brendan Eich
    Lisp, 1958, John McCarthy
    Perl, 1987, Larry Wall
    Python, 1991, Guido van Rossum
    Ruby, 1995, Yukihiro Matsumoto
    Smalltalk, 1972, Alan Kay

    De regreso en el menú principal, si el usuario selecciona la opción “Listar todos los lenguajes”, la página resultante se debe ver así:

    Es importante notar que los lenguajes están ordenados de manera ascendente por edad. La salida de arriba fue generada en el año 2013.

  6. Verifica que todas las páginas resultantes sean HTML5 válido utilizando el Servicio de Validación de W3C.

¿Qué se debe entregar?

Para entregar tu trabajo individual, sigue las siguientes instrucciones:

✔ Instrucciones para subir archivo

Para entregar el archivo lab8.tgz, ingresa los siguientes datos:

Solicitar NIP

Fecha límite: Miércoles, Octubre 22.

Evaluación

Esta actividad será evaluada usando los siguientes criterios:

50% Implementación de los requerimientos.
50% Reporte de la práctica de laboratorio.
DA El programa y/o reporte es un plagio.