Tengo una aplicación que consulta la base de datos PostgreSQL con una excelente biblioteca pg-promise .
¿Hay alguna manera de obtener un seguimiento de pila amigable en el caso de que la sintaxis de consulta contenga errores? Ya sea a través de la configuración de Node o la configuración de pg-promise.
UnhandledPromiseRejectionWarning
arrojado en el error de consulta no da una indicación de en qué código fuente la aplicación realizó la consulta.Aquí hay un ejemplo de seguimiento de pila inútil:
(node:53357) UnhandledPromiseRejectionWarning: error: there is no parameter $1 at Parser.parseErrorMessage (/Users/moo/code/myapp/node_modules/pg-protocol/dist/parser.js:278:15) at Parser.handlePacket (/Users/moo/code/myapp/node_modules/pg-protocol/dist/parser.js:126:29) at Parser.parse (/Users/moo/code/myapp/node_modules/pg-protocol/dist/parser.js:39:38) at Socket.<anonymous> (/Users/moo/code/myapp/node_modules/pg-protocol/dist/index.js:8:42) at Socket.emit (events.js:314:20) at addChunk (_stream_readable.js:303:12) at readableAddChunk (_stream_readable.js:279:9) at Socket.Readable.push (_stream_readable.js:218:10) at TCP.onStreamRead (internal/stream_base_commons.js:188:23) (Use `node --trace-warnings ...` to show where the warning was created) (node:53357) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2) (node:53357) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
No hay ninguna indicación de dónde se realizó la consulta en este seguimiento de la pila, lo que dificulta la identificación de errores. Además, agregar node --trace-warnings
no agrega un contexto más útil al seguimiento de la pila.
Alternativamente, ¿hay otras bibliotecas de conectores PostgreSQL para Node que tengan más capacidades de seguimiento de errores?
Nodo v14.
Falta un poco el seguimiento de pila nativo para promesas en NodeJS. Es por eso que dentro de pg-promise está documentado en todas partes que Bluebird con Long Stack Tracing es un mejor enfoque.
const Promise = require('bluebird'); // overload for the default Promise Promise.config({ longStackTraces: true // enable long-stack tracing }); const pgp = require('pg-promise')({ promiseLib: Promise // use custom promise library within pg-promise });
Tenga en cuenta que longStackTraces: true
genera una pequeña penalización en el rendimiento, por lo que no desea habilitarlo para la producción.