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.

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.

Tags:  , ,

Answer

  1. Avatar for 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 argumento folderPath 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 que test.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 desde index.js, pero funcionaría bien al ejecutarse desde test.js?

    Detalles del servidor

    Aquí hay algunos detalles del servidor:

    • Versión de Nodejs 14.7.0
    • Se está utilizando Cpanel
    • Cuando ocurre el fallo 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 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 desde index.js. También podría estar relacionado con la forma en que se cargan y ejecutan index.js y otros archivos.

    Solución

    Aquí hay algunas posibles soluciones que podrían ayudar:

    • Verificar los permisos del sistema de archivos y asegurarse de que el usuario que ejecuta el proceso Nodejs tenga suficientes permisos para crear carpetas/archivos.
    • Intentar ejecutar el servidor Nodejs con un usuario diferente y ver si eso marca alguna diferencia.
    • Revisar los archivos de configuración en el servidor para ver si hay conflictos con el proceso Nodejs.
    • Intentar cargar y ejecutar index.js de una manera diferente, por ejemplo, usando require().
    • Usar una biblioteca como mkdirp en lugar de fs.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.

Comments are closed.