Actualizar un proyecto Node a Express v4

main-image

¡Hola a todos! En este nuevo post vamos a actualizar el proyecto del anterior post acerca de montar una Rest Api con Node.

Si tenéis más proyectos que hagan uso de node y express, os recomiendo actualizar a la nueva versión o bien especificar en el fichero package.json la version de express que se desea usar.

Un breve resumen acerca de los cambios de la nueva version se puede encontrar en ésta página, aún así, los cambios más significativos son:

  • Se elimina app.configure
  • Se suprimen todos los modulos que venian integrados en express Por lo que ahora cada modulo no solo es externo , sino que tambien han cambiado los nombres , en la gran mayoría son solo con guiones que separan palabras.
  • ya no se usa app.router , ahora se van declarando las rutas y los middlewares en orden .
  • Ahora podemos modular de mejor modo los métodos por cada ruta. De este modo, en vez de declarar
     app.get(url, manejador); 
    app.post(url, manejador);
    Declaramos una sóla ruta y añadimos los manejadores:
     app.route(url) 
    .get(manejador);
    .post(manejador);

Vamos a por un ejemplo real:

En el anterior post teníamos la siguiente configuración:

 require( './routes/model_db' ); //for DB mongoose.

var express = require('express');
var routes = require('./routes'); // Para las funciones con la DB
var http = require('http');
var path = require('path');

var app = express();

app.set('port', process.env.PORT || 8001);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());

app.use(app.router);
app.use(require('stylus').middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));

// Pagina de Inicio: http:localhost:PORT
app.get('/', routes.getAll);

// API
app.post('/api/entries', routes.postnew);
app.get('/api/entries', routes.getTodo);
app.get('/api/entries/:id', routes.getById);
app.put('/api/entries/:id', routes.putById);
app.delete('/api/entries/:id', routes.deleteById);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Para instalar estos módulos, podemos , o bien instalarlos usando:

 npm install method-override morgan static-favicon --save 

Usando el flag --save , conseguimos que se descarge la última versión disponible y lo guardamos en el fichero package.json .


El otro modo, consiste en abrir el propio package.json incluyendo los módulos que vamos a usar.

 {
  "name": "application-name",
  "version": "0.0.1",
  "private": true
  "dependencies": {
    "jade": "*",
    "stylus": "*",
    "mongoose": "*",
    "express": "^4.1.0",
    "static-favicon": "^1.0.2",
    "morgan": "^1.0.0",
    "method-override": "^1.0.0",
    "json": "0.0.14",
    "body-parser": "^1.0.2"
  }
}

Si usamos : '*' con el asterísco, instalaremos la ultima versión disponible. No es recomendable.

Ahora , tal como hemos comentado en la primera parte, añadimos los módulos que vamos a insertar:

var express        = require('express')
  , methodOverride = require('method-override')
  , logger         = require('morgan')
  , favicon        = require('static-favicon')
  , Jade           = require('jade')
  , bodyParser     = require('body-parser')
  , app            = express();

Y anulamos la llamada al método

 // app.use(app.router);

Con estos simples cambios, ya tenemos actualizada nuestra aplicación a la nueva version de Express.

El proyecto, así como todos los archivos e instrucciones, podéis encontrarlos:
GitHub: (https://github.com/cybermarkus1/Backboneplate)

Gracias por leerme!

Marco Antonio Pajares Silva

I am a computer programmer, passionate about tech and JS world, newbie entrepreneur, former game developer, Madrilian and currently, Frontend developer at Smaato (Hamburg,Germany).

Hamburg, Germany http://ayxos.github.io/

Subscribe to Life of a Panda programmer in Germany

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!