You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js ENOENT错误:无法读取server下resources文件夹中的图片

问题原因及解决办法

核心问题1:相对路径解析逻辑不对

你用的相对路径../../resources/cp_pdf_logo.png是基于**Node.js进程的工作目录(CWD)**来解析的,不是基于当前脚本文件的位置。本地开发时你的工作目录可能刚好和脚本目录层级匹配,但生产服务器上,启动服务的工作目录大概率和本地不一样,导致解析出来的路径根本不存在,所以报ENOENT错误。而绝对路径/app/resources/...直接指定了文件的真实位置,所以能正常工作。

核心问题2:require不能直接导入图片

Node.js的require是用来加载JS、JSON这类模块文件的,本身不支持导入图片这类二进制静态资源。除非你用Webpack、Vite这类打包工具做了配置,把图片转成base64或者资源路径,但纯Node服务场景下直接用require导入图片肯定会失败。

解决办法

1. 用脚本文件的绝对路径来构建资源路径

不管工作目录是什么,基于当前脚本的位置来拼绝对路径就不会错:

  • 如果是CommonJS模块:

    const path = require('path');
    const logoPath = path.join(__dirname, '../../resources/cp_pdf_logo.png');
    // 之后用fs.readFile(logoPath, ...)读取即可
    

    __dirname是Node.js提供的变量,代表当前脚本文件所在的目录,用path.join拼接路径能自动处理不同系统的路径分隔符(Windows的\和Linux的/)。

  • 如果是ES模块(用import/export):
    ES模块没有__dirname,需要手动转换:

    import path from 'path';
    import { fileURLToPath } from 'url';
    const __filename = fileURLToPath(import.meta.url);
    const __dirname = path.dirname(__filename);
    const logoPath = path.join(__dirname, '../../resources/cp_pdf_logo.png');
    

2. 验证路径是否正确

可以在代码里加一行打印,确认生产环境下生成的路径对不对:

console.log('Logo文件路径:', logoPath);

部署后看日志,检查这个路径是不是对应服务器上图片的真实位置。

3. 读取图片用fs模块,别用require

如果是后端服务需要读取图片内容,直接用fs.readFile或者fs.createReadStream配合上面的正确路径就行,完全不需要用require。

内容的提问来源于stack exchange,提问作者Niishaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:36:18