Estoy tratando de importar imágenes que tengo almacenadas en una carpeta llamada recursos ubicada en la sección del servidor.
Cuando coloco las imágenes en la carpeta de la aplicación en mi disco local, funciona bien, pero como esto tiene que implementarse en nuestro servidor en vivo, hace que sea difícil tener que copiar archivos de un lado a otro.
El error que obtengo:
Error: ENOENT: no existe tal archivo o directorio, abra '../../resources/cp_pdf_logo.png' en Object.openSync (nodo:fs:585:3) en Object.readFileSync (nodo:fs:453:35) en RouteEmails.orderAuth (C:\Development\kaizen\server\routes\emails\file:\C:\Development\kaizen\server\routes\emails\func.js:187:43) en RouteEmails.sendMail (C:\ Development\kaizen\server\routes\emails\file:\C:\Development\kaizen\server\routes\emails\func.js:430:17) en RouteOrders.orderAuthorizedMail (C:\Development\kaizen\server\routes\ orders\file:\C:\Development\kaizen\server\routes\orders\func.js:840:24) en processTicksAndRejections (nodo:internal/process/task_queues:96:5) en RequestRouter._routeRequest (C:\Development \kaizen\server\socketController\file:\C:\Development\kaizen\server\socketController\requestRouter.ts:64:34) en RequestRouter.processMessage (C:\Development\kaizen\server\socketController\file:\C: \Desarrollo\kaizen\servidor\socketController\requestRouter.ts:43:9) en Socket. (C:\Desarrollo\kaizen\servidor\socketController\archivo:\C:\Desarrollo\kaizen\servidor\socketController\socketClient.ts:62:7) { errno: -4058, syscall: 'abierto', código: 'ENOENT ', ruta: '../../resources/cp_pdf_logo.png' }
Aquí hay un ejemplo de mi código:
let ordercplogo = this.base64_encode("../../resources/cp_pdf_logo.png") let orderthankyoulogo = this.base64_encode("../../resources/thankyou_logo.png") // let ordercplogo = this.base64_encode("/app/resources/cp_pdf_logo.png"); // let orderthankyoulogo = this.base64_encode("/app/resources/thankyou_logo.png");La sección comentada es lo que funciona, pero en la imagen de abajo puedes ver que tengo estos archivos almacenados dentro de la aplicación.
¿Alguien puede decirme qué estoy haciendo mal?
PD. También he intentado importar las imágenes de arriba con
const logo1 = require("../../resources/image.png")pero tampoco funciona y arroja otro error.
Su función probablemente intente encontrar la imagen relativa al directorio de trabajo. Hace una diferencia si fueras a hacer cd /; node /app/index.js o cd /app; node index.js . El directorio de trabajo puede ser diferente en su entorno en vivo que localmente.
Hay una serie de funciones para ayudarlo a encontrar la ruta a un archivo en el módulo de path incorporado.
Supongamos que está en un archivo llamado routes/companies/a.js :
const { resolve } = require('path'); this.base64_encode(resolve(__dirname, "../../resources/cp_pdf_logo.png")); // Will find the absolute path to the file. (página de documentación path.relative )
En los archivos CommonJS (archivos que usan require() ), el valor __filename siempre se refiere al archivo en el que se encuentra, en lugar del archivo de secuencia de comandos principal (por lo tanto, /app/routes/companies.a.js en este ejemplo) y __dirname es el directorio en el que se encuentra. in. Ese es el mismo valor, sin la parte a.js