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

Node.js部署Cloud Foundry报错:Array.includes is not a function求助

问题原因与解决办法

这个问题我之前帮同行排查过,核心原因很明确:你本地用的Node.js版本支持ES2016的Array.prototype.includes()方法,但Cloud Foundry环境里的Node.js版本太低,不支持这个特性。

具体说下为啥会这样:

  • includes是ES2016(也就是常说的ES7)引入的数组方法,Node.js从6.0.0版本开始才原生支持它;
  • 你本地的Node版本肯定是6.0.0以上的,所以代码跑起来没问题;但Cloud Foundry默认分配的Node版本可能低于6.0.0,或者环境配置里没开启对这个新特性的支持,导致fs.readdirSync返回的数组对象上根本没有includes这个方法,自然就抛出报错了。

给你三个可行的解决方向:

  1. 换成兼容老版本的写法(最快修复)
    直接用ES3就支持的indexOf替代includes,逻辑完全一致,兼容性拉满:

    var fs = require('fs');
    var data = fs.readdirSync("<directory>");
    if(data.indexOf('a') !== -1){ 
        console.log('value found!'); 
    }
    
  2. 指定Cloud Foundry使用高版本Node
    在项目根目录添加一个package.json,明确指定Node版本(比如选14.x这种稳定版),Cloud Foundry会自动按这个版本部署:

    {
      "engines": {
        "node": "14.x"
      }
    }
    

    这样部署后,环境里的Node就支持includes了,原代码不用改就能正常运行。

  3. 加Polyfill兼容旧环境
    如果因为某些限制没法升级Node版本,可以在代码最开头加一段Polyfill,手动给数组添上includes方法:

    // 兼容不支持includes的旧Node版本
    if (!Array.prototype.includes) {
      Array.prototype.includes = function(searchElement, fromIndex) {
        fromIndex = fromIndex || 0;
        return this.indexOf(searchElement, fromIndex) !== -1;
      };
    }
    
    // 你的原有代码
    var fs = require('fs');
    var data = fs.readdirSync("<directory>");
    if(data.includes('a')){ 
        console.log('value found!'); 
    }
    

内容的提问来源于stack exchange,提问作者Jatin S Bhavra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:40:57