Windows
Azure网站使用IISNode在IIS中托管Node进程。实际上,为Node站点分配了一个命名管道,该管道接收传入的请求,而不是像在本地运行或托管自己时使用的TCP端口。即使您可以打开TCP端口,Azure网站实际上也仅适用于传统网站,而无法打开通往外界的端口。
因此,首先,您需要在代码中更改端口,例如:
var port = process.env.PORT||3000; //which you can runboth on Azure or local var server = app.listen(process.env.PORT||3000);
在我的测试中,我们需要配置一些其他配置,以从应用程序中删除错误,以使其在Azure Web App上运行。
看来这会在https://github.com/alexmingoia/koa-
router/issues/177直接在Azure上运行koa应用程序时引起同样的问题,因此我们需要配置nodeProcessCommandLine
:
创建一个以
iisnode.yml内容命名的文件:
nodeProcessCommandLine:"%programfiles%nodejs%WEBSITE_NODE_DEFAULT_VERSION%node.exe"--harmony-generators设置 WEBSITE_NODE_DEFAULT_VERSION* 相对于您在站点管理器门户网站的“
配置” 标签中的 应用程序设置 中设置的值。 *
作为运行在Azure Web
Apps上的node.js应用程序,需要以
server.js或
app.js文件作为根目录中的入口,并带有一个
web.config文件来控制iis(如果您通过git部署或通过node.js模板构建应用服务器,它将自动创建)。例如
<configuration><system.webServer> <handlers> <!-- indicates that the app.js file is a node.js application to be handled by the iisnode module --> <add name="iisnode" path="server.js" verb="*" modules="iisnode" /> </handlers> <rewrite> <rules> <!-- Don't interfere with requests for logs --> <rule name="LogFile" patternSyntax="ECMAscript" stopProcessing="true"> <match url="^[a-zA-Z0-9_-]+.js.logs/d+.txt$" /> </rule> <!-- Don't interfere with requests for node-inspector debugging --> <rule name="NodeInspector" patternSyntax="ECMAscript" stopProcessing="true"> <match url="^server.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"> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True" /> </conditions> <action type="Rewrite" url="server.js" /> </rule> </rules> </rewrite></system.webServer>
因此,您可以将SPA文件放在
public根目录下的文件夹中,例如,您的SPA入口是
index.html,当您访问
<your_site_name>.azurewebsites.net/index.html它时,它将被重写为“
/public/index.html”。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)