> For the complete documentation index, see [llms.txt](https://medellin-js.gitbook.io/workshop-fullstack-js-developer/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://medellin-js.gitbook.io/workshop-fullstack-js-developer/backend/express-js/configuracion.md).

# Configuración

Ahora vamos a instalar varias dependencias que harán nuestra configuración de Express.js más profesional para un futuro paso a producción

En la raíz de nuestro proyecto ejecutamos la siguiente linea:

```bash
# install dependencies
npm i -S compression body-parser method-override errorhandler
```

#### Compression

Cuando utilizamos ExpressJS para alojar nuestro servidor, hay una pequeña mejora de rendimiento que podemos hacer (funciona de forma universal en cualquier tipo de servidor: plantillas HTML a API REST de JSON para servidores de imágenes), que es para habilitar la compresión GZIP.

Con este middleware podremos obtener una compresión GZIP de forma muy fácil para nuestro servidor.

#### Body Parser

Usualmente el cuerpo de una petición (payload), contiene información desde una petición tipo POST cuando un cliente desea crear una nueva entidad/registro o actualizar uno existente mediante PUT. Los desarrolladores quienes implementan servidores, requieren frecuentemente accesar a la información del cuerpo de dicha petición.

El modulo npm `body-parser` nos permite realizar esta tarea. No es necesario programarla. Luego de instalar esta dependencia debemos habilitar `json()` así como `url-encode` como middlewares para convertir datos a JSON.

#### Method Override

Cuando intentamos usar PUT y DELETE en HTML, tenemos un problema. Los navegadores admiten PUT y DELETE, pero solo mediante la solicitud a través de AJAX, pero no a través del envío de 'formulario HTML. Este middleware nos ayudará a resolver esto.

#### Errorhandler

Este middleware solo debe utilizarse en un entorno de desarrollo, ya que los seguimientos de la pila de errores completos y los detalles internos de cualquier objeto pasado a este módulo se devolverán al cliente cuando se produzca un error. Cuando se proporciona un objeto a Express como un error, este módulo mostrará la mayor cantidad posible de este objeto, y lo hará mediante la negociación de contenido para la respuesta entre HTML, JSON y texto sin formato.

### Configurando Express.js

Luego de tener claro los middleware anteriores vamos agregarlos a nuestra configuración base de Express.js, para eso vamos a crear un archivo en `config/express.js`

{% code title="config/express.js" %}

```javascript
/**
 * Express configuration
 */

const compression = require('compression');
const bodyParser = require('body-parser');
const methodOverride = require('method-override');
const errorHandler = require('errorhandler');

module.exports = (app) => {
  const env = app.get('env');

  app.use(compression());
  app.use(bodyParser.urlencoded({ extended: false, limit: '50mb' }));
  app.use(bodyParser.json({ limit: '50mb' }));
  app.use(methodOverride());

  if (env === 'development' || env === 'test') {
    app.use(errorHandler()); // Error handler - has to be last
  }
};
```

{% endcode %}

### Actualizando app.js

Ahora vamos agregar nuestra configuración de Express.js a nuestra aplicación, vamos actualizar el archivo `app.js` con dos lineas:

{% code title="app.js" %}

```javascript
// Add this line
const expressConfig = require('./config/express');

// Add this line
expressConfig(app);
```

{% endcode %}

Finalmente nuestro archivo `app.js` debe quedar similar a este:

```javascript
const express = require('express');
const http = require('http');

// New line
const expressConfig = require('./config/express');

// Setup server
const app = express();
const server = http.createServer(app);

// New line
expressConfig(app);

const config = {
  port: 8080,
  ip: '127.0.0.1',
};

// Start server
function startServer() {
  app.shoppingCartBK = server.listen(config.port, config.ip, () => {
    console.log(`Express server listening on ${config.port}, in ${app.get('env')} mode`);
  });
}

setImmediate(startServer);

// Expose app
module.exports = app;
```

Después  de hacer esto recuerda hacer un nuevo commit.

#### Repositorio: [Add the express config](https://github.com/colombia-dev/medjs-workshop-fullstack-js-backend/commit/b39a32236d0413b082a2e7607d5f3efc8c34b099)
