😭 Knex JS ломает logger
Knex – одна из самых известных библиотек для работы со SQL в NodeJS. И как полагается, подобного рода библиотеки могут принимать на вход внешний логгер.
НО вместо того, чтобы просто вызывать функции логгера, он переприсвает все его методы в свой класс (фото 1)...
Догадались в чем может быть проблема? Ответ через 3... 2... 1...
А проблема в том, что если ваш логгер под собой использует "this" без байндинга к инстансу (что не является обязательным), то теперь его "this" будет ссылаться на класс внутреннего логгера Knex...
В последних проектах я часто использую логгер Pino и внутри его логики используется "this" без байдинга и это приводит к крашу приложения
Чтобы все заработало приходится использовать мерзкий хак (фото 2)
Чему это нас учит?
"this" очень коварная штука и, конечно, мне хочется сказать "просто перестаньте использовать классовую нотацию" (потому что я ее уже давно не использую), но в реальности прошу вас хотябы не переприсвайте методы другого (особенно неподконтрольного) "объекта"
Мощной вам прокачки 💪