Bonjour,

Voila je rencontre un petit problème avec mon code. Ce dernier est écrit en TypeScript. Je pense que le forum Javascript est le plus approprié pour poster ma question.

Ce que je fais

Actuellement, j'ai une classe qui ressemble à ceci:

class DB extends DBAbstract {

    private readonly _db: Database;
    private readonly _logger: LoggerAbstract;

    constructor(filepath: string, log: LoggerAbstract, verboseMode = false,  traceMode = false) {
        super();

        if (verboseMode) {
            this._db = new (verbose()).Database(filepath, (err) => {
                if (err) { throw err; }
            });
        } else {
            this._db = new Database(filepath, (err) => {
                if (err) { throw err; }
            });
        }

        this._logger = log;

        if (traceMode) {
            this.logger.changeLvl("trace");
            this.logger.log("Changement de logLevel pour trace", "trace");
            this.db.on("trace", (query) => this.logger.log(query, "trace"));
        }

        this.run("PRAGMA main.journal_mode = truncate;", [], () => {
            this.logger.log("Truncate ON", "trace");
        });

        this.run("PRAGMA foreign_keys = ON;", [], () => {
            this.logger.log("Foreign Key ON", "trace");
        });
    }

    public run(query: string, params: any[], callback?: (err: (Error | null)) => void): void {
        this.db.run(query, params, callback);
    }

Il s'agit du constructeur de ma classe DB. Ce que je fais lors de l'initialisation: je vérifie si on est en mode débug et/ou trace. J'exécute deux queries qui me permettent de: forcer le truncate du journal de log (pour gagner un peu en vitesse) et forcer la vérification des clés étrangères. La méthode run plus bas appelle juste la méthode du même nom de la librairie (https://www.npmjs.com/package/sqlite3)

Ce que je veux

J'aimerais que lorsque que j'active le mode trace, les queries soient loggués par mon logger. Ce qui permettra de plus facilier régler les problèmes de queries à l'avenir (voir ce qui aura été exécuté et non la version préparée de la query).

Ce que j'obtiens

Malheureusement, je ne vois que le log suivant:
[2019-12-19T17:56:35.308] [TRACE] default - Changement de logLevel pour trace

Donc, le logger marche bien et je passe bien dans la condition. Seulement voilà: les 2 queries du constructeur n'apparaissent pas dans mes logs. J'ai vérifié et j'ai bien la méthode run qui est appelée. En Javascript pure (sans classe), je n'ai aucun problème. J'arrive à avoir le résultat souhaité. Je pense donc que le problème est lié à TypeScript. J'ai regardé le fichier transpillé et je ne vois pas de souci (ou bien cela m'a échappé).

Merci d'avance pour votre aide :)

2 réponses


Bonjour,

Est-ce que tu a testé avec une autre fonction en callback de run() ?
Quelque chose de plus simple, du genre "alert()" ??

Oui, j'ai essayé avec un console.log() (avec un bête string) et rien ne s'affichait :/

Désolé pour le délai de la réponse, mais j'étais chez de la famille pour la période de Noël et je n'ai pas pu répondre plus tôt ^^'