Fiz um pequeno form de login (email e senha) Então se email ou senha incorretos a mensagem deveria aparecer no form da mesma forma que ocorre no produtos/form do curso:
<div class="has-error">
<%if(errosValidacao){%>
<%for(var i=0;i<errosValidacao.length;i++){%>
<%=errosValidacao[i].msg%>
<%}%>
<%}%>
</div>
E fiz um route seguindo a ideia do produtos.js do curso:
app.post('/', function(request, response){
var login = request.body
var connection = app.infra.connectionFactory();
var usuariosDAO = new app.infra.UsuariosDAO(connection);
usuariosDAO.valida(login, function(erros, resultados){
if(resultados!=""){
usuario = resultados;
response.redirect(usuario, 'principal/painel', erros);
}
else{
response.status(200).render('login/index', {errosValidacao:[{param:'1065',msg:'email ou senha inválidos', value:''}], login:login});
connection.end();
return;
}
});
});
E criei um UsuariosDAO:
UsuariosDAO.prototype.valida = function(login, callback){
clausulaSQL = "select * from tb_usuarios where email_usuario = '" +
login.email_usuario + "' and pwd_usuario = '" + login.pwd_usuario + "'" ;
this._connection.query(clausulaSQL, callback);
}
Quando executo e insiro uma senha incorreta, a mensagem de email ou senha inválidos aparece no form, mas depois de alguns segundos aparece no console um erro:
events.js: 160
throw er; // Unhandled 'error' event
^
Error: Quit inactivity timeout
at \node_modules\mysql\lib\protocol\Protocol.js:160:17)
at emitNone(events.js:86:13)
at Quit.emit(events.js:185:7)
at Quit._onTimeout(\node_modules\mysql\lib\protocol\sequences\Sequence.js:126:8)
at tryOnTimeout (timers.js:224:11)
at Timer.listOnTimeout(timers.js:198:5)
Esse erro não aparece quando executo o produtos/form do curso então só posso supor que a conexão esteja correta. Parece que mysql espera que eu trate um erro. Mas na verdade a clausula não tem erro, apenas ela não retorna registro nenhum pois não há usuário com aquele email e aquela senha.