Node.js和MS Azure中的process.env.port变量

5
请考虑以下Node.js代码:
var http = require('http');
var port = process.env.port || 1337;
http.createServer(function (req, res) {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello World\n');
}).listen(port);

在Microsoft Azure中,它无法工作,因为process.env.port变量中的字符串值(例如:\.\pipe\e289ed7e-b57b-46bb-8bba-ad8cd1f1529cf)导致了这个问题。为什么会发生这种情况?


这里有一些相关链接!http://tostring.it/2014/07/09/nodejs-azure-and-iis/ 但是解决方案仍然无法正常工作! - Ehsan
尝试: process.env.PORT || process.env.PORT || 1337 - Shaswat Rungta
2个回答

15

唯一需要做的是拥有一个适当的 web.config 文件,以处理在 Microsoft Azure 中的命名管道端口。这个文件的最简内容可以是:

<configuration>
<system.webServer>
      <handlers>
        <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
      </handlers>
      <rewrite>
        <rules>
          <rule name="DynamicContent">
            <match url="/*" />
            <action type="Rewrite" url="server.js"/>
          </rule>
        </rules>
      </rewrite>
</system.webServer>
</configuration> 

如果您的初始NodeJS文件是 app.js,请将上述内容中的 server.js 字符串替换为它!


谢谢您提供的解决方案。它在我们的应用程序上运行良好。我们花了一天时间解决Azure网站上的这个问题。 - dcpartners
谢谢您。这太棒了,在Azure上的node js应用程序的前两个谷歌搜索结果中,这一点并不清楚(或完全缺失)。此外,在env对象的'port'属性(与PORT相比)的大小写方面似乎存在一些不一致性。 - Phil Cooper

2

应该区分大小写。尝试:

process.env.PORT

也许我误读了问题,但它指出 process.env 是未定义的,而不仅仅是 process.env.port - robertklep
1
我编辑了问题,这里有一些相关链接!http://tostring.it/2014/07/09/nodejs-azure-and-iis/但是解决方案仍然无法工作! - Ehsan
我目前没有工具,但从我的项目中可以看出,我一直使用这个变量,他们在教程中也使用它。您还可以使用process.env来访问应用程序设置和连接字符串。它必须能够正常工作。也许是其他原因导致了问题。http://azure.microsoft.com/en-us/documentation/articles/web-sites-nodejs-develop-deploy-mac/ - Bruno Faria
同样的问题:http://stackoverflow.com/questions/25514750/process-env-port-prints-weird-string - Ehsan
一个有用的网页: http://tomasz.janczuk.org/2011/08/hosting-nodejs-applications-in-iis-on.html - Ehsan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接