1.0.4 • Published 6 years ago

express-router-object v1.0.4

Weekly downloads
1
License
MIT
Repository
github
Last release
6 years ago

express-router-object

Criação de rotas de uma forma alternativa para Express usando um objeto JavaScript (JSON)

Instalação

Abra um terminal na pasta do seu projeto e execute:

  yarn add express-router-object
  // ou
  npm install express-router-object

Usando

Importação básica para uso da biblioteca

  import express from 'express';
  import extractRoutes from 'express-router-object';

  const app = express();

  app.use(
    extractRoutes({ /* TODO */ })
  );

  app.listen(3333);

Uso recomendado

  /* server.js */
  import express from 'express';
  import routes from './routes';

  const app = express();

  app.use(routes);

  app.listen(3333);
  /* routes.js */
  import extractRoutes from 'express-router-object';

  routes = { /* TODO */ };

  export default extractRoutes(routes)

Criando uma rota /users com um método GET

  app.use(
    extractRoutes({
      '/users': (req, res) => { /* TODO */ } // rotas sem especificação do método usaram GET por padrão
    })
  );

  // equivalente no express

  app.get('/users', (req, res) => {{ /* TODO */ })

Criando encadeamento de rotas com vários métodos

  app.use(
    extractRoutes({
      '/users': {
        get: (req, res) => { /* TODO */ },
        post: (req, res) => { /* TODO */ },

        '/:id': {
          get: (req, res) => { /* TODO */ },

          '/repos': {
            get: (req, res) => { /* TODO */ },

          '/commits/:commit_id': (req, res) => { /* TODO */ },
          },
        }
      }
    })
  );

  // equivalente no express

  app.route('/users')
    .get((req, res) => {{ /* TODO */ }))
    .post((req, res) => {{ /* TODO */ }));

  app.get('/users/:id', (req, res) => {{ /* TODO */ });
  app.get('/users/:id/repos', (req, res) => {{ /* TODO */ });
  app.get('/users/:id/repos/commits/:commit_id', (req, res) => {{ /* TODO */ });

Adicionando um middleware de log

  const logMiddleware = (req, res, next) => {
    console.log(`LOG: Method: ${req.method} URL: ${req.url}`);
  }

  app.use(
    extractRoutes({
      middlewares: logMiddleware, // use um [] para vários middlewares

      '/users': (req, res) => { /* TODO */ }
    })
  );

  // equivalente no express

  app.use(logMiddleware);
  app.get('/users', (req, res) => {{ /* TODO */ })

Esse tipo de declaração adiciona o middleware para todas as rotas declaradas subsequentemente, caso o intuito seja usar o middleware em uma única rota, use essa sintaxe

  const logMiddleware = (req, res, next) => {
    console.log(`LOG: Method: ${req.method} URL: ${req.url}`);
  }

  app.use(
    extractRoutes({
      '/users': [logMiddleware, (req, res) => { /* TODO */ }]
    })
  );

  // equivalente no express

  app.get('/users', logMiddleware, (req, res) => {{ /* TODO */ })

Alguns diferenciais no uso dos middlewares

  const logMiddleware = (req, res, next) => {
    console.log(`LOG: Method: ${req.method} URL: ${req.url}`);
  }

  const authMiddleware = (req, res, next) => { /* TODO */ }

  app.use(
    extractRoutes({
      middlewares: logMiddleware, // use um [] para vários middlewares

      '/users': (req, res) => { /* TODO */ }

      '/appointments': {
        middlewares: authMiddleware,

        get: (req, res) => { /* TODO */ },
        post: (req, res) => { /* TODO */ },
        put: (req, res) => { /* TODO */ },
        delete: (req, res) => { /* TODO */ },
      }

      '/schedules': (req, res) => { /* TODO */ }
    })
  );

  /*
    Nesse caso o logMiddleware foi aplicado para todas as rotas,
    mas o authMiddleware foi aplicado apenas na rota appointments
    mesmo tendo uma rota schedules declarada após essa adição.

    --- Porém só é possivel usar uma única vez a opção middlewares por objeto
  */

  // equivalente no express

  app.use(logMiddleware);
  
  app.get('/users', (req, res) => {{ /* TODO */ });

  app.get('/schedules', (req, res) => {{ /* TODO */ });

  app.use(authMiddleware);

  app.route('appointments')
    .get((req, res) => {{ /* TODO */ });
    .post((req, res) => {{ /* TODO */ });
    .put((req, res) => {{ /* TODO */ });
    .delete((req, res) => {{ /* TODO */ });

  /*
    Na API nativa você precisa modificar a sequência das declarações
    para obter o mesmo efeito.
  */
  • A ordem da declaração dos atributos do objeto influência diretamente no comportamento dos middlewares.

Observação importante

Você pode acabar se perguntando: Mais linhas de código pelo mesmo resultado ?

E a resposta é simples:

Está biblioteca tem apenas um intuito de prover uma forma alternativa de declarar rotas usando um único objeto JavaScript (JSON), focando no encadeamento das rotas de forma direta e agrupada.

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago