Leí esta pregunta de stackoverflow y esta y otras búsquedas en Internet. el resumen de mi búsqueda es module.exports y las exports apuntan al mismo objeto que se exportará y se puede acceder a esas exportaciones con require(<package identifier> or <JS file identifire>). debido a que la estrategia de paso de parámetros en el JS es call-by-sharing si asignamos una función a module.exports el objeto de exports ahora es inútil (porque las exports aún apuntan al valor anterior de module.exports ) agrego esto también desde nodejs.com , la función require() nos dará variables y funciones exportadas desde main module de un package o un archivo js normal.
ahora la pregunta es ¿por qué enel archivo express.js tenemos otras cosas que están adjuntas a las exportaciones mientras asignamos una función a module.exports ?
porque en esta linea
exports = module.exports = createApplication; estos apuntan a la misma función y en la función js son objetos.