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.