Olá, minha duvida é mais conceitual.
Imagine que eu tenho um arquivo de rota que chama um método de listagem em um controller:
app.get('/listar', app.controllers.fotoController.listar);
Agora no controller eu escrevo como classe
FotoController = function() {
this.model = require('mongoose').model('Foto');
};
FotoController.prototype.listar = function(req, res) {
this.model.find({})......
};
module.exports = new FotoController();
Dessa forma a listagem não funciona pois o THIS do método listar não é o proprio objeto FotoController mas sim o objeto do express.
Isso acontece pois agora o this é sempre referente a quem chama a função e não ao contexto fechado do objeto.
Caso eu queira que esse mesmo codigo funcione eu tenho que atrelar a instancia através de um BIND la na minha chamada na rota
app.get('/listar', app.controllers.fotoController.listar.bind(app.controllers.fotoController));
Dessa forma o this dentro do metodo listar fica sendo a instancia do fotoController e não o objeto do express. Fazendo tudo funcionar.
Minha pergunta é: Existe alguma forma de mudar esse comportamento ? ou eu sempre vou ficar refem de dar esse bind passando o contexto ?
Sempre trabalhei com classes js escritas dessa forma e o this não funcionava dessa maneira. Agora no node estou enfrentando essa dificuldade.