Servidor Web

Express

Express é um framework de aplicação que disponibiliza um servidor Web rápido e leve e fornece um conjunto de recursos necessários para a criação de uma API robusta.

Para mais informações sobre o Express, acesse https://expressjs.com/.

Instalando o Express

Para instalar o Express, abra o Terminal e digite:

$ npm i express

Esse comando instala o Express como dependência no package.json.

  "dependencies": {
    "express": "4.16.3",
  }

Configurando o Express

Para adicionar os parâmetros de configuração do Express, edite o arquivo .env.

NODE_ENV = development
DATABASE = mongodb://localhost:27017/workshop
PORT = 3000

Nessa configuração estamos definindo o número da porta que será utilizada pelo Express.

Dica

Por convenção, utilizamos a porta 3000.

Para disponibilizar as informações do Express através do módulo de configurações, edite o arquivo config.js.

/* eslint no-process-env: 0 */

require('dotenv').config();

const environment = ['NODE_ENV', 'DATABASE', 'PORT'];

environment.forEach((name) => {
  if (!process.env[name]) {
    throw new Error(`${name}: ${process.env[name]}`);
  }
});

module.exports = {
  NODE_ENV: process.env.NODE_ENV,
  DATABASE: process.env.DATABASE,
  PORT: process.env.PORT
};

Para validar a configuração, edite o arquivo index.js.

...
logger.info('Hello Express');
logger.info(`NODE_ENV: ${config.NODE_ENV}`);
logger.info(`DATABASE: ${config.DATABASE}`);
logger.info(`PORT: ${config.PORT}`);

O resultado da execução da aplicação pode ser visualizado no Terminal.

info: Hello Express
info: NODE_ENV: development
info: DATABASE: mongodb://localhost:27017/workshop
info: PORT: 3000
info: MongoDB connected!

Inicializando o Express

Para instanciar e exportar o Express, crie o arquivo app.js.

const express = require('express');

const app = express();

app.get('/', (req, res) => res.send('Hello Express'));

module.exports = app;

Esse módulo exporta o objeto app, uma instância do Express. Ele responde Hello Express quando a URL / (root) for acessada através do método GET.

Para inicializar o Express, edite o arquivo index.js.

const mongoose = require('mongoose');

// importar o app
const app = require('./app');
const config = require('./config');
const logger = require('./logger');

mongoose.connect(
  config.DATABASE,
  { useNewUrlParser: true }
);
mongoose.Promise = global.Promise;

mongoose.connection.on('connected', () => {
  logger.info('MongoDB connected!');
});

mongoose.connection.on('disconnected', () => {
  logger.warn('MongoDB disconnected!');
  process.exit(1);
});

mongoose.connection.on('error', (err) => {
  logger.error('MongoDB Error!', err.message);
  process.exit(1);
});

// inicializar o Express na porta definida no arquivo .env
app.listen(config.PORT, () => {
  logger.info('Hello Express');
  logger.info(`NODE_ENV: ${config.NODE_ENV}`);
  logger.info(`DATABASE: ${config.DATABASE}`);
  logger.info(`PORT: ${config.PORT}`);
});

A função listen() inicializa o servidor web e começa a aceitar requisições na porta 3000.

O resultado da execução da aplicação pode ser visualizado no Terminal.

info: Hello Express
info: NODE_ENV: development
info: DATABASE: mongodb://localhost:27017/workshop
info: PORT: 3000
info: MongoDB connected!

Validando as configurações do Express

Para validar as configurações do Express, abra o Postman, selecione a opção GET, informe a URL http://localhost:3000 e clique em Send.

Postman

O body da resposta deve apresentar a seguinte informação.

Hello Express

Alterando o formato para JSON

Para alterar a resposta para o formato JSON, edite o arquivo app.js.

app.get('/', (req, res) => res.json({ message: 'Hello Express' }));

Realizando a requisição novamente através do Postman, o formato da resposta deve ser JSON.

{
  "message": "Hello Express"
}

Mundo Real

Embora o Express seja um servidor Web robusto, ele não deve ser acessado diretamente através da Internet. O ideal é configurar um servidor Web mais robusto ainda e fazer um proxy para o Express. Eu recomendo a utilização do NGINX.

Resumo

  • Aprendemos a configurar e aceitar requisições do servidor Web
  • Aprendemos a utilizar JSON como formato para a resposta das requisições