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

Node.js应用本地正常,部署至Heroku后报Cannot read properties of undefined错误

问题分析与解决方案

报错Cannot read properties of undefined (reading 'length')的核心原因是:fs.readdir执行时出现了错误,但你的代码没有处理错误回调,导致files变量为undefined,后续访问files.length直接崩溃。本地运行正常是因为你的本地机器上testFolder路径正确且存在,而Heroku环境中出现了路径错误或文件夹不存在的情况。

解决步骤

1. 补全错误处理逻辑

修改getRandom函数,先处理fs.readdir的错误,避免访问undefined的files:

const fs = require('fs');
const path = require('path');

// 用绝对路径定义testFolder,避免相对路径在Heroku上出错
const testFolder = path.join(__dirname, '你的文件夹名称'); // 替换成实际的文件夹名

function getRandom() {
    return new Promise((resolved, rejected) => {
        fs.readdir(testFolder, (err, files) => {
            // 先处理错误
            if (err) {
                console.error('读取文件夹失败:', err);
                return rejected(err); // 把错误抛出,方便排查
            }
            // 确保files有内容再继续
            if (!files || files.length === 0) {
                return rejected(new Error('文件夹中没有文件'));
            }
            let random = files[Math.floor(Math.random() * files.length)];
            console.log("Random is " + random);
            resolved(random);
        });
    })
}

2. 确保路径正确

本地的相对路径在Heroku的部署环境中可能失效,必须用path.join(__dirname, '文件夹名')生成绝对路径,这样无论部署到哪里,都能正确定位到目标文件夹。

3. 确认目标文件夹已上传到Heroku

检查你的.gitignore文件,确保testFolder对应的文件夹没有被排除在外。如果文件夹被忽略,部署时Heroku服务器上就不会有这个文件夹,自然会读取失败。

4. 验证Node.js版本一致性

你的package.json里指定了Node.js版本为16.17.0,可以在本地运行node -v确认本地版本和这个一致,避免版本差异导致的隐性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:01:24