[英]Port being undefined in the Azure Node.js application running on IISNode
我有一个使用 IISNode 运行 Node.js 应用程序的 Azure 应用服务。 问题是process.env.PORT
未定义。 我已经读到 IISNode 使用了一种叫做命名管道的东西,并且端口信息可能不容易读取(?),但在我的情况下,我只是未定义。
我尝试部署的项目可以从GitHub 找到。
我确实定义了一个 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%。
我在这里缺少什么? 任何帮助表示赞赏!
我花了好几天的时间来找出进程未启动的原因,因此未定义 env 变量。 我在 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 站点) → Process Explorer → node.exe → 属性 → 环境变量:
我有一个使用IISNode运行Node.js应用程序的Azure应用服务。 问题是process.env.PORT
未定义。 我已经读过IISNode使用了一种叫做管道的东西,并且端口信息可能不容易阅读(?),但是在我的情况下,我只会得到未定义的信息。
我尝试部署的项目可以在GitHub上找到。
我确实定义了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%。
我在这里想念的是什么? 任何帮助表示赞赏!
我花了好几天的时间来找出原因,原因是该进程无法启动,因此env变量未定义。 我在15分钟内在Heroku上启动并运行了该应用程序,所以我认为这仍然是个谜(至少对我而言)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.