Servidor node.js basado en clases

Has notado que cuando escribes el código de tu servidor Node (express) y este comienza a crecer, el archivo principal (por lo general index.js) crece bastante y es muy difícil poder comprender donde está ubicado el código por secciones (pese a que se pongan muchos comentarios).
El ejemplo completo esta al final.
Aquí un pequeño ejemplo:

Una buena forma para solventar esto seria poder tener un servidor basado en una clase, la cual permita tener un código más legible y de paso aprovechar y reutilizar este servidor en próximos proyectos, ya que nos brinda una estructura para construirlo.
Teniendo esto en mente vamos entonces a modificar nuestro servidor
Crearemos un nuevo archivo el cual llamaremos “server.js” y dentro vamos a crear una clase:

Vamos ahora a configurar entonces “express” dentro de nuestra clase (también configuramos el puerto):

Ahora bien, recordemos que todo lo que está dentro del método constructor de nuestra clase, se va a ejecutar cuando se cree una instancia de la clase. Esto es importante debido a que podemos aprovechar este comportamiento para crear ciertos métodos los cuales se ejecuten una vez la instancia del servidor fue creada.
Creemos ahora algunos métodos

Vemos como de una forma descriptiva el método encapsula la lógica de que hará el código que podremos dentro.
Los métodos:
routes
getConnection
middlewares
Vamos a ejecutarlos al instanciar la clase, pero el método listen es quien nos va a permitir decidir desde cuando nuestro servidor puede empezar a escuchar. Veámoslo. Primero hagamos que estos métodos se ejecuten dentro del método constructor:

ahora modifiquemos nuestro metodo listen

Vemos que la configuración es prácticamente igual ya que seguimos usando express, pero ahora haciendo uso de “this“.
De esta manera entonces podemos ir creando nuestro servidor de una manera más ordena separando nuestro servidor en bloques de codigos.
Creemos ahora una instancia de nuestro servidor y veamos otro detalle importante. Dentro de nuestro archivo “index.js” vamos a requerir nuestra clase server y vamos a crear una instancia de la clase la cual llamaremos app, luego con app podemos ejecutar el método listen e indicarle a nuestro servidor que ya puede empezar a escuchar por el puerto que hemos definido

Ahora bien, si nos fijamos en nuestro archivo “server.js” hemos hecho uso de “process.env” para requerir el puerto pues para poder acceder a las variables de entorno con nuestra implementación de servidor vamos a configurar aquí en el archivo “index.js” el módulo correspondiente para ello.

Tenemos entonces ahora un servidor que nos provee una estructura más clara y fácil de seguir a la hora de estructurar nuestro servidor.
Espero este ejemplo haya sido de ayuda.

