Usando classes ES6 OU Literais de Objeto em controladores para um aplicativo Express + NodeJS

Há duas coisas sobre as quais estou muito confuso.

Qual é a vantagem de usar qualquer classe ES6 ou literal de objeto.

E onde devo usar algum deles?

Alguns dos exemplos que estou testando são mencionados abaixo. Informe-me quando usar um modo específico de implementação e quando não usar.

Exemplo de classe 1:

// auth.js
class Auth {
  login(req, res) {...}
  signup(req, res) {...}
}

module.exports = new Auth();

// index.js
const auth = require('auth');

Exemplo de Classe 2:

// auth.js
class Auth {
  login(req, res) {...}
  signup(req, res) {...}
}

module.exports = Auth;

// index.js
const Auth = require('auth');
const auth = new Auth();

Exemplo literal de objeto:

// auth.js
module.exports = {
  login: (req, res) => {...},
  signup: (req, res) => {...}
};

// index.js
const auth = require('auth');

O que penso ao ler sobre eles é o seguinte:

Exemplo de classe 1:

Você não pode criar mais de um objeto. Porque um módulo é executado apenas uma vez. Portanto, em cada importação, você obterá o mesmo objeto. Algo semelhante ao singleton. (Corrija-me aqui se eu entendi errado)

Você não poderá acessar os métodos estáticos da classe porque está exportando apenas o objeto da classe.

Exemplo de Classe 2:

Se você tem uma classe que não contém nada além de métodos auxiliares e o objeto não possui nenhum estado, não faz sentido criar objetos dessa classe o tempo todo. Portanto, no caso de classes auxiliares, isso não deve ser usado.

Exemplo literal de objeto:

Você não pode fazer herança.

O mesmo objeto será repassado a cada requisito. (Corrija-me se eu estiver errado aqui também)

Por favor, ajude-me a entender esses conceitos, o que estou perdendo, o que entendi mal e o que deve ser usado quando e onde. Ficarei muito grato por sua ajuda.

Sinta-se livre para editar a pergunta, se você acha que cometi um erro em algum lugar.

questionAnswers(2)

yourAnswerToTheQuestion