express-router-object v1.0.4
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.