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.
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:
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: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.