在 IISNode 上运行的 Azure Node.js 应用程序中未定义端口

2024-05-06

我有一个使用 IISNode 运行 Node.js 应用程序的 Azure 应用服务。问题是process.env.PORT未定义。我读过 IISNode 使用一个叫做命名管道并且端口信息可能不容易读取(?),但就我而言,我只是未定义。

我尝试部署的项目可以从GitHub https://github.com/ttamminen/NodeJS-StarterSiteTemplate.

我确实定义了一个 Web.config 文件,它看起来像这样:

    <handlers>
        <!-- indicates that the app.js file is a node.js application to be handled by the iisnode module -->
        <add name="iisnode" path="index.js" verb="*" modules="iisnode" />
    </handlers>

    <rewrite>
        <rules>
            <!-- Don't interfere with requests for node-inspector debugging -->
            <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
                <match url="^index.js\/debug[\/]?" />
            </rule>

            <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
            <rule name="StaticContent">
                <action type="Rewrite" url="public{REQUEST_URI}" />
            </rule>

            <!-- All other URLs are mapped to the Node.js application entry point -->
            <rule name="DynamicContent">
                <match url="/*" />
                <action type="Rewrite" url="index.js" />
            </rule>
        </rules>
    </rewrite>

    <!-- You can control how Node is hosted within IIS using the following options -->
                <!--<iisnode      
                  node_env="%node_env%"
                  nodeProcessCountPerApplication="1"
                  maxConcurrentRequestsPerProcess="1024"
                  maxNamedPipeConnectionRetry="3"
                  namedPipeConnectionRetryDelay="2000"      
                  maxNamedPipeConnectionPoolSize="512"
                  maxNamedPipePooledConnectionAge="30000"
                  asyncCompletionThreadCount="0"
                  initialRequestBufferSize="4096"
                  maxRequestBufferSize="65536"
                  watchedFiles="*.js"
                  uncFileChangesPollingInterval="5000"      
                  gracefulShutdownTimeout="60000"
                  loggingEnabled="true"
                  logDirectoryNameSuffix="logs"
                  debuggingEnabled="true"
                  debuggerPortRange="5058-6058"
                  debuggerPathSegment="debug"
                  maxLogFileSizeInKB="128"
                  appendToExistingLog="false"
                  logFileFlushInterval="5000"
                  devErrorsEnabled="true"
                  flushResponse="false"      
                  enableXFF="false"
                  promoteServerVars=""
                 />-->
    <iisnode watchedFiles="*.js;node_modules\*;routes\*.js;views\*.jade;views\account\*.jade;iisnode.yml" />
</system.webServer>

我编写了一个 Kudu 脚本,它将构建资产并将它们复制到%DEPLOYMENT_TARGET%。

我在这里缺少什么?任何帮助表示赞赏!

Update

我花了好几天的时间来找出进程无法启动并因此环境变量未定义的原因。我在 15 分钟内就在 Heroku 上安装并运行了该应用程序,所以我想这仍然是个谜(至少对我来说)。


“Starter Site”应用程序没有为我部署,看起来它的许多依赖项现在都已损坏。话虽如此,以下是使用 Azure 应用服务所需的最少内容:

var http = require('http');

function onRequest(request, response) {
    response.writeHead(200, {
        'Content-type': 'text-plain'
    });
    response.write('Hello from Node.');
    response.end();
}

// provess.env.PORT will expand to the name pipe value on App Service
// request --> Frontends (ARR) --> Web Worker (IIS) --> iisnode --> 
//    --named-pipe--> node.exe server.js

http.createServer(onRequest).listen(process.env.PORT || 3000);
console.log('Listening for requests on port ' + (process.env.PORT || 3000));

你不必担心什么process.env.PORT返回,它由平台在运行时处理,并保证返回正确的东西。

以下是幕后的情况:

Kudu(.scm站点)→进程资源管理器→node.exe→属性→环境变量:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 IISNode 上运行的 Azure Node.js 应用程序中未定义端口 的相关文章

随机推荐

  • 加载一张随机 flickr 图像并附加到 div

    我基本上试图加载从特定用户和特定集合中获取的随机 flickr 图像 然后将其显示在 ID 为 flickr wrap 的 div 中 我正在尝试操纵此 JSON 代码来执行我想要的操作 但不知道从哪里开始 这段代码当前加载了很多图像 我只
  • 如何在 PHP 中验证小数

    如何在 PHP 中验证十进制数字 我查看了 is numeric 但这对我不起作用 bool is numeric 混合变量 查找给定变量是否为 数字 数字字符串包括 可选符号 任意数量的数字 可选的小数部分和可选的 指数部分 因此 012
  • BitmapFactory.decodeResource 返回空值

    我试图从视图对象中的内部资源加载位图 源本身位于 可绘制 文件中 代码是 import android content Context import android graphics Bitmap import android graphi
  • 如何根据当前请求更改 django 设置?

    我从一个 django 实例运行多个站点 并期望该框架最终能够通过一个或多个安装为数百个站点提供服务 我需要根据当前请求修补一些 django 设置 我已经编写了一些中间件来对设置进行猴子修补 但我需要在调用中间件之前修补这些设置 因为其他
  • 为什么结构体不能转换为嵌入类型

    package main type Inner struct x int type Outer struct Inner func main x Inner 1 y Outer x cannot convert x type Inner t
  • 为什么在步骤中将 TransactionManager 设置为 JPATransactionManager 不正确?

    我正在使用 Spring Batch 和 JPA 并且经历了 TransactionManager bean 冲突 我通过在步骤中将 TransactionManager 设置为 JpaTransactionManager 找到了解决方案
  • 在 CalDAV 中扩展重复事件

    假设 CalDAV 客户端非常愚蠢 深度嵌入 并且无法自行计算重复事件 然而 它能够放入 CalDAV 请求 假设 CalDAV 日历存储了生日 其中一个生日是 2000 年 12 月 31 日 现在客户希望收到 2005 05 05 到
  • 从用户定义的函数调用 sql

    SQL Server 2008 是否可以从用户定义函数中的变量执行 sql 或者使用存储过程是唯一的解决方案 我有一条sql语句保存在variabele中 mySqlStatement select from someTable 我想从用户
  • 如何从 URL 流式传输音频而不在设备上下载 mp3 文件

    如何在 Swift 中从 URL 流式传输音频而不在设备上下载 mp3 文件 我需要导入什么 我需要某些库吗 添加任何内容到 info plist 中吗 请评论你的代码 您可以使用 iOS AVPLayer 从 url 传输音频 var p
  • 非托管代码调用 vb.net 回调

    我正在将处理 COM 对象事件的 vb net 应用程序 可能用 VB6 编写 从框架 1 1 升级到 WPF 2 0 3 5 代码 为简洁起见 简化了对象名称 public class MyClass Private WithEvents
  • 如何在Python中打印出字母表中的第n个字母?

    ASCII 数学似乎在 Python 中不起作用 一 5 不起作用 如果没有字母数组 如何快速打印出字母表中的第 n 个字母 我天真的解决方案是这样的 letters A B C D E F G H I J K L M N O P Q R
  • 初始化父类时如何返回子类的新实例?

    给定一个类层次结构如下 class A def initialize param if param 1 then initialize and return instance of B else initialize and return
  • C# Elasticsearch NEST 无法转换 lambda 表达式

    我遇到了与此处描述的完全相同的问题 但未得到解答 ElasticSearch NEST 搜索 https stackoverflow com questions 24615676 elasticsearch nest search I us
  • 需要.Net 的公式解释器[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 当我们回来时,查看寻呼机片段状态寻呼机适配器出现白屏?

    我已经使用 FragmentStatePagerAdapter 使用视图分页器来加载片段 当我第一次来时 它会工作 但如果我从寻呼机适配器重定向到其他片段并返回 它将显示空白屏幕 fragment community xml
  • 如何获取默认的iOS浏览器名称?

    Stack Overflow 应用程序检测到我越狱设置的默认浏览器 Chrome 的名称 我怎样才能在 Objective C 和 Swift 中实现同样的目标 只是名称 不是 ActivityView 代码 Example Update
  • 登录 python + mod_wsgi 应用程序

    我在 apache 服务器上部署了一个 python Flask 应用程序 这是我的abc conf file WSGIDaemonProcess voting app threads 5 WSGIScriptAlias election
  • 为什么 new()/delete() 比 malloc()/free() 慢?

    为什么new delete 比malloc free 慢 EDIT 感谢到目前为止的回答 如果您有new 和delete 的标准C 实现规范 请指出 谢谢 看一下这段C代码 struct data pd malloc sizeof stru
  • PostgreSQL 9.3 触发器函数插入带有参数化名称的表

    我正在尝试在 Postgres 中动态分区日志条目 我有 53 个子表 1 个代表每周的日志条目 并且希望使用触发器将 INSERT 路由到子表 我运行该函数INSERT INTO log5 VALUES NEW 并且它有效 我用以下命令运
  • 在 IISNode 上运行的 Azure Node.js 应用程序中未定义端口

    我有一个使用 IISNode 运行 Node js 应用程序的 Azure 应用服务 问题是process env PORT未定义 我读过 IISNode 使用一个叫做命名管道并且端口信息可能不容易读取 但就我而言 我只是未定义 我尝试部署