es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Object.writeFileSync – Tipo recibido número.

Tengo una aplicación monolítica antigua escrita en NodeJS.

Requiere muchos node_modules.

La aplicación se está cerrando debido a una excepción no controlada que está ocurriendo en alguno de los módulos.

Has activado un rechazo no controlado, es posible que hayas olvidado capturar un rechazo de Promesa: undefined
TypeError [ERR<em>INVALID</em>ARG<em>TYPE]: El argumento "data" debe ser de tipo string o una instancia de Buffer, TypedArray o DataView. Se recibió el tipo number (22388)<br>
    en Object.writeFileSync (node:fs:2146:5)
    en ProcessContainer (/usr/lib/node</em>modules/pm2/lib/ProcessContainer.js:67:8)
    en Object.<anonymous> (/usr/lib/node<em>modules/pm2/lib/ProcessContainer.js:100:3)
    en Module.</em>compile (node:internal/modules/cjs/loader:1101:14)
    en Object.Module.<em>extensions..js (node:internal/modules/cjs/loader:1153:10)
    en Module.load (node:internal/modules/cjs/loader:981:32)
    en Function.Module.</em>load (node:internal/modules/cjs/loader:822:12)
    en Function.executeUserEntryPoint [as runMain] (node:internal/modules/run<em>main:79:12)
    en node:internal/main/run</em>main_module:17:47

Por ahora, he incluido este código con la esperanza de que me brinde una traza de errores:

process.on('uncaughtException', (e) => {
  logger.error(e.stack || e, `Ocurrió una excepción no controlada`);
  process.exit(1);
});

El problema es que pasan varios días/semanas antes de que ocurra el error.

¿Alguien ha tenido un problema similar/igual?
¿Existe alguna forma de reemplazar globalmente la función de algún módulo?
Si esto es posible, sería fácil para mí crear una función envuelta con try catch.

Utilizo NodeJS 14, el 16 tiene el mismo problema. No puedo revertir la versión de Node.

Voy a intentar con esto. Sin embargo, no estoy seguro si sobrescribirá fs.writeFileSync en todas partes.

import fs from 'fs';

const f = fs.writeFileSync;
delete fs.writeFileSync;
fs.writeFileSync = (fileName, data, options) => {
  try {
    logger.debug({ fileName }, `Sobrescribiendo la función writeFileSync`);
    f(fileName, data, options);
  } catch (err) {
    logger.error({ err: err.stack || err, fileName }, 'Error al escribir el archivo');
  }
};
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en Node.js y fs, entiendo que tienes una aplicación monolítica antigua escrita en NodeJS que requiere muchas node_modules. La aplicación se cierra debido a una excepción no controlada que ocurre en algunos de los módulos. Has activado un evento de “unhandledRejection” que puede haber ocurrido debido a que olvidaste capturar la promesa rechazada. Además, has recibido un “TypeError [ERR_INVALID_ARG_TYPE]” que indica que el argumento “data” debe ser de tipo string o una instancia de Buffer, TypedArray o DataView.

    Para depurar este problema, has incluido el código para capturar el seguimiento de la pila de la excepción no capturada. Sin embargo, dado que lleva varios días o semanas que se produzca el error, estás buscando una manera de anular globalmente la función de algún módulo para crear una función envuelta con try-catch.

    Planeas probar el código que elimina y anula la función fs.writeFileSync, pero no estás seguro si anulará la función en todos los lugares. También estás utilizando NodeJS 14 y no puedes revertir la versión de Node. Agradecerías los conocimientos de cualquier persona que haya experimentado un problema similar.

Comments are closed.