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

IIS服务器部署Adonis.js 5失败 报PORT环境变量E_INVALID_ENV_VALUE错误

错误原因

IIS使用iisnode模块托管Node.js应用时,默认会将命名管道路径赋值给PORT环境变量用于进程间通信,而非AdonisJS 5默认要求的数字格式端口,触发环境变量校验失败。

排查步骤
  • 检查IIS站点是否已安装iisnode模块,且web.config配置正确指向Adonis的启动入口文件
  • 打开项目根目录下的env.ts,确认PORT字段的校验规则为默认的Env.schema.number()
  • 可在server.ts顶部添加console.log(process.env.PORT)启动项目,确认输出值为\\.\pipe\开头的命名管道路径
解决方案

方案1:修改环境变量校验规则(推荐,兼容所有部署场景)

修改env.ts中的PORT校验规则,允许同时接收数字端口和字符串格式的命名管道:

// 原规则
// PORT: Env.schema.number(),

// 修改后规则
PORT: Env.schema.union([
  Env.schema.number(),
  Env.schema.string()
])

修改后重新编译项目:
node ace build --production
将build目录产物同步到IIS站点目录,重启站点即可。

方案2:指定固定端口(适合单站点独立部署)

在项目根目录的web.config中,给iisnode配置段添加固定端口参数:

<configuration>
  <system.webServer>
    <iisnode port="3000" />
    <!-- 其余配置保持不变 -->
  </system.webServer>
</configuration>

同时将项目.env文件中的PORT参数修改为3000,确保端口未被占用后重启IIS站点。

方案3:启动前预处理环境变量(不改动校验规则)

在server.ts文件最开头添加如下代码,优先适配IIS的命名管道参数:

// 适配IIS命名管道
if (process.env.PORT?.startsWith('\\\\.\\pipe\\')) {
  const pipePath = process.env.PORT
  delete process.env.PORT
  // 启动时直接传入管道路径
  new Ignitor(__dirname)
    .httpServer()
    .start(pipePath)
} else {
  // 本地开发走原有逻辑
  new Ignitor(__dirname)
    .httpServer()
    .start()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:15:03