Node.js se bloquea silenciosamente al intentar acceder al sistema de archivos con “fs”.
Actualmente estoy trabajando en un servidor de API Node.js con Express. En una ruta específica tengo esto:
const fs = require("fs/promises");
fs.mkdir(folderPath, {recursive: true})).then(console.log).catch(console.log);
“folderPath” es la ruta completa de la carpeta que quiero crear. Ahora, cuando la ejecución alcanza esta línea, el servidor Node.js se bloquea silenciosamente sin dejar ningún rastro, nada en los archivos de registro, nada en el bloque try/catch del código, nada en el controlador de errores de Express. La solicitud a esa ruta específica recibirá un error 503, que no es de Express, y creo que este error se origina en el servidor mismo después de que Node.js se bloquea.
Para asegurarme de que el error no sea causado por los parámetros pasados a fs.mkdir, específicamente puse las líneas de código anteriores en el archivo de entrada (index.js) donde se inicia la aplicación express, y reemplacé “folderPath” por una ruta real que estoy seguro de que existe.
const fs = require("fs/promises");
fs.mkdir("/home/abcd/efg", {recursive: true})).then(console.log).catch(console.log);
Y el servidor Node.js se bloquea tan pronto como lo inicio, sin dejar rastro, como mencioné anteriormente.
Lo siguiente que intenté es ejecutar un archivo “test.js” con las líneas de código anteriores desde la terminal, ya que test.js solo contiene esas dos líneas de código.
node test.js
test.js se encuentra en la misma carpeta que index.js, y sorprendentemente funciona. La carpeta se crea sin ningún error, lo que me deja confundido. ¿Por qué fallaría al ejecutarse desde index.js, pero funciona bien al ejecutarse desde test.js?
¿Qué estoy haciendo mal aquí que está causando los bloqueos? ¿Hay algún problema de permisos del que no estoy al tanto, o es algo más?
Aquí hay algunos detalles del servidor: Imagen
Estoy usando Node 14.7.0. Otra cosa es que cuando ocurre el bloqueo del servidor, se crean archivos de gran tamaño llamados “core####” (por ejemplo, core3424) en la carpeta raíz de la API, donde se encuentra index.js. Además, el número de procesos y el uso de memoria alcanzan el máximo.
davy.ai
Depuración de fallos en el servidor Nodejs al usar
fs.mkdir()
Descripción del problema
Actualmente estoy trabajando en un servidor API de Nodejs con Express, y tengo una ruta específica en la que estoy intentando crear una carpeta usando la función
fs.mkdir()
. El argumentofolderPath
es la ruta completa de la carpeta que quiero crear. Sin embargo, cuando la ejecución llega a esta línea, el servidor Nodejs se bloquea silenciosamente sin dejar rastro alguno.Investigación
He intentado investigar el problema revisando archivos de registro, bloques
try/catch
y manejadores de errores de Express, pero no he encontrado ningún mensaje de error ni rastro en la pila. La solicitud a esa ruta específica devuelve un error 503, que no es de Express, y pienso que este error se origina en el servidor mismo después de que Nodejs se bloquea.Para asegurarme de que el error no se debe a los parámetros pasados a
fs.mkdir()
, específicamente puse las líneas de código anteriores en el archivo de entrada (index.js
) donde se inicia la aplicación Express, y reemplacéfolderPath
con una ruta real que estoy seguro de que existe. Sin embargo, el servidor Nodejs se bloquea tan pronto como lo inicio, sin dejar rastro alguno, tal como mencioné anteriormente.Lo siguiente que intenté fue ejecutar un archivo
test.js
con las líneas de código anteriores desde la terminal, ya quetest.js
solo contiene esas dos líneas de código. Sorprendentemente, funciona y la carpeta se crea sin errores, lo cual me deja confundido. ¿Por qué fallaría al ejecutarse desdeindex.js
, pero funcionaría bien al ejecutarse desdetest.js
?Detalles del servidor
Aquí hay algunos detalles del servidor:
core3424
) en la carpeta raíz de la API, donde se encuentraindex.js
. Además, el número de procesos y el uso de memoria alcanzan su máximo.Posibles causas
Según la información proporcionada, el problema podría estar relacionado con los permisos, el sistema de archivos o algún tipo de configuración que impide que
fs.mkdir()
se ejecute correctamente cuando se llama desdeindex.js
. También podría estar relacionado con la forma en que se cargan y ejecutanindex.js
y otros archivos.Solución
Aquí hay algunas posibles soluciones que podrían ayudar:
index.js
de una manera diferente, por ejemplo, usandorequire()
.mkdirp
en lugar defs.mkdir()
para crear carpetas de forma recursiva.mkdirp
se encarga de cualquier condición de carrera, asegura que los permisos se configuren correctamente y devuelve una Promesa para que los errores se puedan capturar fácilmente.Espero que esto ayude a resolver el problema.