Thrustjs / thrust

thrust como uma plataforma de linha de comando
MIT License
22 stars 5 forks source link

Precisamos melhorar o tratamento e apresentação de exceções #6

Closed brunobrandaosbx closed 6 years ago

brunobrandaosbx commented 6 years ago

Hoje já incluímos um tratamento exceções durante o require, ou seja, caso durante o export de um módulo seja lançado um erro nós tratamos e apresentamos o erro e arquivo que lançou o mesmo.

O problema é que depois de passado esse momento, não existe mais um tratamento.

Imagine o seguinte caso:

// startup.js:
loadJar('./postgresql-42.1.4.jar')

let server = require('http') //Se um erro for lançado nesse momento, seremos avisados corretamente
server.createServer(8778)
// teste/db.js:
let db = require('database').createDbInstance(getConfig().database)

function run() {
  let rs = db.select('SELECT 1 FROM')
  show(rs)
}

exports = {
  run: run
}

Ao executarmos o endpoint via localhost:8080/teste/db/run, o erro que será lançado pelo driver do banco, será pego apenas pelo ServletContainer, que imprimirá um stack parecido com isso no browser:

org.postgresql.util.PSQLException: ERRO: erro de sintaxe no fim da entrada
  Position: 14
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2477)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2190)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:300)
        at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:428)
        at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:354)
.......

Sabemos apenas que o erro foi lançado pelo endpoint, mas não a linha ou qual parte do mesmo. Imagine que temos vários selects em um mesmo endpoint, qual foi o que lançou o erro?

Temos que debater as possíveis e melhores saídas para este problema.