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');
}
};