Gostaria que avaliassem o seguinte código, ele funciona mas não sei se é uma boa ideia, estou usando Node, Express e MongoDB:
rota.js:
const AuthDao = require('../infra/autenticacao-dao');
module.exports = (app) => {
app.post('/autenticacao/registro', (requisicao, resposta) => {
// Uso a clase AuthDao para validar os dados recebidos
// e comunicar com o banco
const authDao = new AuthDao();
authDao.store(requisicao.body)
.then(resultado => resposta.status(201).json(resultado))
.catch(erro => resposta.status(401).json(erro));
});
}
autenticacao-dao.js:
const BancoDados = require('./banco-dados');
class AuthDao {
store(json) {
return new Promise((resolve, reject) => {
// validações e rejects omitidos...
json.password = bcrypt.hashSync(json.password, saltRounds);
// em vez de criar um arquivo com as configurações
// criei uma classe que lida a conexão com o banco
let bd = new BancoDados();
bd.conecta(
collection => collection.insertOne(json)
);
return resolve({
success: true,
message: "Usuário registrado com sucesso!"
});
});
}
}
banco-dados.js:
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
class BancoDados {
constructor() {
this._url = 'mongodb://localhost:27017/';
this._dbName = 'banco';
}
conecta(callback) {
const client = new MongoClient(this._url, {
useNewUrlParser: true
});
client.connect((err, client) => {
assert.equal(null, err);
const db = client.db(this._dbName);
// minha dúvida é justamente nessa parte
// está funcionando, mas não sei se é a forma correta
callback(db.collection('collection'));
client.close();
});
}
}
module.exports = BancoDados;