node.js - TypeORM stacktrace visar inte ursprunget till felet i min kod


I ett projekt jag arbetar med får jag då och då ett slumpmässigt TypeORM-fel som kan vara tröttsamt att felsöka, eftersom stackspåret från TypeORM inte visar felkällan i min kod. Det kommer bara att visa stackspåret från TypeORM NPM-paketet.

Några rekommendationer om hur man löser detta?

Nedan är ett exempel på ett sådant problem som nyligen inträffade

(node:5096) UnhandledPromiseRejectionWarning: QueryFailedError: Error: Invalid usage of the option NEXT in the FETCH statement.
    at new QueryFailedError (/home/myuser/repos/somefolder/my-project/api/src/error/QueryFailedError.ts:9:9)
    at /home/myuser/repos/somefolder/my-project/api/src/driver/sqlserver/SqlServerQueryRunner.ts:223:37
    at /home/myuser/repos/somefolder/my-project/api/node_modules/mssql/lib/base.js:1293:25
    at Request.userCallback (/home/myuser/repos/somefolder/my-project/api/node_modules/mssql/lib/tedious.js:661:15)
    at Request._this.callback (/home/myuser/repos/somefolder/my-project/api/node_modules/tedious/lib/request.js:61:27)
    at Connection.endOfMessageMarkerReceived (/home/myuser/repos/somefolder/my-project/api/node_modules/tedious/lib/connection.js:1944:20)
    at Connection.dispatchEvent (/home/myuser/repos/somefolder/my-project/api/node_modules/tedious/lib/connection.js:1012:38)
    at Parser.<anonymous> (/home/myuser/repos/somefolder/my-project/api/node_modules/tedious/lib/connection.js:812:18)
    at Parser.emit (events.js:310:20)
    at Parser.EventEmitter.emit (domain.js:482:12)
    at Parser.<anonymous> (/home/myuser/repos/somefolder/my-project/api/node_modules/tedious/lib/token/token-stream-parser.js:54:15)
    at Parser.emit (events.js:310:20)
    at Parser.EventEmitter.emit (domain.js:482:12)
    at addChunk (/home/myuser/repos/somefolder/my-project/api/node_modules/readable-stream/lib/_stream_readable.js:291:12)
    at readableAddChunk (/home/myuser/repos/somefolder/my-project/api/node_modules/readable-stream/lib/_stream_readable.js:278:11)
    at Parser.Readable.push (/home/myuser/repos/somefolder/my-project/api/node_modules/readable-stream/lib/_stream_readable.js:245:10)

Svar #1

Du kan aktivera loggning av alla frågor och fel genom att helt enkelt ställa in logging: true i dina anslutningsalternativ.

Se detta för mer information.

Dessutom kan du också ställa in olika typer av loggning i anslutningsalternativen.

Att aktivera denna funktionalitet kommer att visa varje SQL-kommando som körs av typeorm i din terminal.

Svar #2

Eftersom jag inte vet vilka förfrågningar du gör verkar den enda rimliga lösningen jag kan tänka mig vara att logga varje förfrågan du gör (som Carlo Corradini föreslog) och när du får ett fel, se listan över de senaste loggade förfrågningarna och försök gissa vad som orsakade problemet. Försök sedan att lägga till lite felhanteringskod på den plats du tror orsakar ett fel, och gräv djupare.

Även för felsökningsändamål kan du försöka fånga obehandlade promise-avslag genom att ställa in en lyssnare på Node.js-processen och sedan försöka få mer information från felobjektet.

process.on('unhandledRejection', error => {
  // Prints "unhandledRejection woops!"
  console.log('unhandledRejection', error.test);
});

new Promise((_, reject) => reject({ test: 'woops!' }));

Vet inte riktigt, kanske är det inte tillämpligt på din specifika situation. Hoppas det kan hjälpa.

Relaterade artiklar