gpt4 book ai didi

node.js - 将 Express 4.x 应用程序部署到 Windows Azure

转载 作者:搜寻专家 更新时间:2023-10-31 23:28:46 25 4
gpt4 key购买 nike

新版本的 Express 将模块与“服务器”文件分开。它现在位于 /bin/www 中,如果可能的话,我希望保留此约定。

package.json文件中,“start”脚本明确指向正确的位置,但这似乎被Azure忽略了。

如果根目录中没有 server.js 文件,如何部署 Express 4.x 应用程序?我需要做的就是让它自动调用 Node ./bin/www而不是 Node server.js。是否有另一个我可以添加特定于云主机(Azure?)的根配置文件,这就是我在 Heroku 等中工作的方式。

最佳答案

更新答案

Azure 团队已在内部修复了此问题。新部署的 Express 4 应用程序应该可以在 Azure 网站上正常运行,无需任何其他更改。

原始答案

我将从长篇大论开始;博士。在应用程序的根目录中创建一个 web.config 文件并使用此 xml。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>

<!--
By default IIS will block requests going to the bin directory for security reasons.
We need to disable this since that's where Express has put the application entry point.
-->
<security>
<requestFiltering>
<hiddenSegments>
<remove segment="bin" />
</hiddenSegments>
</requestFiltering>
</security>

<handlers>
<!-- Indicates that the www file is a node.js entry point -->
<add name="iisnode" path="/bin/www" verb="*" modules="iisnode"/>
</handlers>
<rewrite>
<rules>
<rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^bin\/www\/debug[\/]?" />
</rule>

<!--
First we consider whether the incoming URL matches a physical file in the /public folder.
This means IIS will handle your static resources, and you don't have to use express.static
-->
<rule name="StaticContent">
<action type="Rewrite" url="public{REQUEST_URI}"/>
</rule>

<!-- All other URLs are mapped to the node.js entry point -->
<rule name="DynamicContent">
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
</conditions>
<action type="Rewrite" url="/bin/www"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

这有点困惑,需要一段时间才能找到。我真的希望它足够聪明,能够查看 package.json,但这就是我们现在必须处理的问题。通常,Azure 通过检查 app.js 或 server.js 文件来确定它是否是 Node 应用程序。如果找到该文件,它将自动创建一个与上面非常相似的 web.config 文件。在本例中,它将检测 app.js,但与 99% 的其他 Node 应用程序不同,这实际上并不是入口点。我们要做的就是将入口点更改为/bin/www,如上所示。

我们遇到的另一个问题是,出于安全原因,默认情况下 IIS 会阻止对 bin 文件夹的请求。我们可以重命名express bin文件夹,或者告诉IIS忽略它。这就是 xml 文件的hiddenSegments 部分的用途。

关于node.js - 将 Express 4.x 应用程序部署到 Windows Azure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23319774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com