Object.writeFileSync - Номер полученного типа

У меня есть старое монолитное приложение, написанное на NodeJS.

Для этого требуется много node_modules.

Приложение закрывается из-за необработанного исключения, которое происходит в некоторых модулях.

      You have triggered an unhandledRejection, you may have forgotten to catch a Promise rejection: undefined


TypeError [ERR_INVALID_ARG_TYPE]: The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received type number (22388)    
    at Object.writeFileSync (node:fs:2146:5)
    at ProcessContainer (/usr/lib/node_modules/pm2/lib/ProcessContainer.js:67:8)
    at Object.<anonymous> (/usr/lib/node_modules/pm2/lib/ProcessContainer.js:100:3)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79:12)
    at node:internal/main/run_main_module:17:47

А пока я включил этот код в надежде, что он даст мне трассировку стека:

      process.on('uncaughtException', (e) => {
  logger.error(e.stack || e, `uncaughtException happened`);
  process.exit(1);
});

Проблема в том, что для возникновения ошибки требуется несколько дней / недель.

Была ли у кого-нибудь похожая / такая же проблема? Есть ли способ глобально переопределить функцию какого-либо модуля? Если это возможно, мне было бы легко создать обернутую функцию с помощью try catch.

Я использую NodeJS 14, у 16 ​​такая же проблема. Я не могу откатить версию узла

Я попробую с этим. Однако я не уверен, повсюду ли он перекрыл fs.writeFileSync

      import fs from 'fs';

const f = fs.writeFileSync;
delete fs.writeFileSync;
fs.writeFileSync = (fileName, data, options) => {
  try {
    logger.debug({ fileName }, `Overriding writeFileSync function`);
    f(fileName, data, options);
  } catch (err) {
    logger.error({ err: err.stack || err, fileName }, 'Error in writing file');
  }
};

0 ответов

Другие вопросы по тегам