Registrando middlewares no Express elegantemente
Registrar middlewares no Expres.js é uma tarefa corriqueira para os desenvolvedores na plataforma Node.js. Será que podemos tornar esse processo menos verboso?
Vejamos o seguinte trecho de configuração de uma instância do Express:
const express = require('express')
, app = express()
, cookieParser = require('cookie-parser')
, session = require('express-session')
, passport = require('passport');
// registrando cada middleware importado
app.use(cookieParser());
app.use(session(
{ secret: 'homem avestruz',
resave: true,
saveUninitialized: true
}
));
app.use(passport.initialize());
app.use(passport.session());
// código posterior omitido
Para cada middleware registrado precisaremos chamar a função app.use()
. Podemos simplificar um pouco esse processo através de uma função que se encarregará de registrar cada middleware para nós. Primeiro, vejamos a função isoladamente:
const register = (...middlewares) => app =>
middlewares.forEach(middleware =>
app.use(middleware));
A função recebe um número indeterminado de parâmetros através do Rest parameter. Seu retorno é outra função que ao ser chamada espera receber uma instância do Express. A função percorrerá a lista de middlewares recebida por register
e adicionará cada um deles na instância do express recebida.
Veja a função em uso:
const express = require('express')
, app = express()
, cookieParser = require('cookie-parser')
, session = require('express-session')
, passport = require('passport');
const register = (...middlewares) => app =>
middlewares.forEach(middleware =>
app.use(middleware));
register(
cookieParser(),
session(
{ secret: 'homem avestruz',
resave: true,
saveUninitialized: true
}
),
passport.session(),
)(app);
// código posterior omitido
A função register
conseguiu enxugar boa parte do código, evitando as múltiplas chamadas à app.use()
. Inclusive, nada nos impede de insolarmos a função em um módulo para que possamos reutilizá-la em outros projetos.
Conclusão
Muitas vezes nos acomodamos ao que esse ou aquele framework nos oferece e esquecemos de aplicar um dos grandes poderes da programação que é a criatividade.