3
respostas

Como usar classes com o Consign?

Olá! Gostaria de saber se é possível utilizar classes para as APIs, e importa-las no loader do Consign? Quando eu tentei, eu recebi o erro "TypeError: Class constructor GrupoApi cannot be invoked without 'new'" (óbvio). Então, queria saber se da pra fazer isso, ou se temos que usar um objeto com uma função atribuída mesmo.

3 respostas

Fala aí Nicolas, tudo bem? Consegue me dar mais exemplos do cenário? Não entendi sua necessidade e o porque de fazer isso.

Fico no aguardo.

Fala Matehus!

Então, na construção da API, foram criados diversas funções no objeto da API. Eu achei muito semelhante a classes e métodos, e fiquei curioso para saber se: ao invés de criar um objeto com um conjunto de funções, se seria possível criar uma classe para API e utilizar métodos para realizar as ações no back end.

Por exemplo, ao invés de fazer desta forma:

    const AuthApi = { _model : mongoose.model('Usuario') }

    AuthApi.autentica = (req, res) => {
        AuthApi._model
            .findOne( {
                login : req.body.login,
                senha : req.body.senha
            })
            .then(
                usuario => {
                    if (!usuario) {
                        console.log('Login e senha inválidos');
                        res.sendStatus(401);
                    } else {
                        const token = 
                            jwt.sign( { login : usuario.login }, app.get('secret'), { expiresIn : 84600 });
                        console.log('Token criado e sendo enviado no header de resposta'); 
                        res.set('x-access-token', token);
                        res.end();
                    }
                },
                error => {
                    console.log(error);
                    res.sendStatus(401);
                }
            )
    }

Fazer desta:

    class AuthApi { 

        _model =  mongoose.model('Usuario') 

            autentica(req, res) {
            this._model.
                findOne(....)
        }
    }

Oi Nicolas, até que tem, neste caso, no seu exports você já exporta com o new pronto ou exporta um objeto que tem a referência para a classe.

O problema da segunda abordagem é que você vai precisar fazer coisa do tipo: app.model.user.User, sendo o primeiro user pro nome do arquivo e o segundo User pra pegar a referência pra sua classe.