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

Node.js运行报错:ENOENT no such file or directory, scandir './static/reports'

报错原因

该ENOENT错误是程序运行时无法找到./static/reports目录导致的,核心触发原因通常有两个:

  1. 相对路径解析逻辑不兼容容器环境
    代码中使用的./static/reports是相对路径,解析基准是进程启动时的工作目录,Docker容器的默认工作目录和本地开发环境不一致,就会出现路径匹配失败。你代码中express.static已经用了__dirname拼接绝对路径,读取目录的逻辑也要保持一致才不会出错。
  2. Docker镜像未包含对应目录
    如果打包Docker镜像时没有把static目录复制到镜像内的对应路径,运行时自然找不到该目录。
解决方案
  • 首先修改路径读取逻辑,改用绝对路径拼接,可提前判断目录不存在时自动创建:
const express = require('express');
const app = express();
const db = require('./persistence');
const fs = require('fs');
const path = require('path');
// 拼接绝对路径,和express.static的路径规则保持一致
const reportPath = path.join(__dirname, './static/reports');
// 目录不存在时自动创建,recursive参数支持多级目录创建
if (!fs.existsSync(reportPath)) {
  fs.mkdirSync(reportPath, { recursive: true });
}
const files = fs.readdirSync(reportPath);

app.use(require('body-parser').json());
app.use(express.static(path.join(__dirname, '/static')));

db.init().then(() => {
    app.listen(3000, () => console.log('Listening on port 3000'));
}).catch((err) => {
    console.error(err);
    process.exit(1);
});

const gracefulShutdown = () => {
    db.teardown()
        .catch(() => {})
        .then(() => process.exit());
};

process.on('SIGINT', gracefulShutdown);
process.on('SIGTERM', gracefulShutdown);
process.on('SIGUSR2', gracefulShutdown); // Sent by nodemon
  • 然后检查你的Dockerfile配置,确保打包时已经把项目根目录的static文件夹复制到了容器内/app/src/路径下,示例配置参考:
WORKDIR /app
# 复制所有项目文件到容器工作目录
COPY . .
# 若上面的COPY规则没覆盖static目录,单独增加一行
COPY ./static /app/src/static

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:09:03