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

在IIS部署Node.js应用时遭遇iisnode错误:端口号无效

解决IIS部署Node.js应用时的"Invalid port number"错误

问题详情

部署Node.js应用到IIS时触发iisnode内部错误,核心报错信息如下:

iisnode处理请求时发生错误。
HRESULT: 0x2
HTTP status: 500
HTTP subStatus: 1002
HTTP reason: Internal Server Error

Node.js进程stderr输出的关键异常:

Error: Invalid port number: \.\pipe\0347a3ad-a892-4089-a2f3-6e49876e9adb
    at normalizePort (C:\inetpub\wwwroot\SchoolPtm-Mujeeb\server.js:16:11)
    at Object.<anonymous> (C:\inetpub\wwwroot\SchoolPtm-Mujeeb\server.js:23:14)

问题原因

iisnode通过**命名管道(Named Pipe)**与Node.js应用通信,而非常规数字端口。但server.js中的normalizePort函数仅校验数字格式端口,无法识别iisnode传入的管道路径字符串,导致抛出异常。

解决方案

修改server.js中的normalizePort函数,使其兼容iisnode的命名管道格式:

function normalizePort(val) {
  const port = parseInt(val, 10);

  // 处理iisnode的命名管道路径
  if (typeof val === 'string' && val.startsWith('\\\\.\\pipe\\')) {
    return val;
  }

  if (isNaN(port)) {
    return val;
  }

  if (port >= 0) {
    return port;
  }

  return false;
}

同时确保应用监听环境变量传入的端口,禁止硬编码端口号:

const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

const server = http.createServer(app);
server.listen(port);

额外注意事项

  • 必须通过process.env.PORT获取iisnode分配的通信管道/端口,不能硬编码端口
  • 确认IIS已正确安装iisnode模块,站点web.config配置了iisnode处理规则

内容的提问来源于stack exchange,提问作者Yawar manzoor sheikh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:37:03