更改我的文件扩展名和路由以指向重命名的.ejs文件后,我的应用程序在Azure上中断但在本地工作正常。
var app = angular.module('theApp', ['ui.router']);
app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
$stateProvider.state('index', {
url: '/index',
templateUrl: '/templates/index.ejs',
controller: 'MainCtrl'
})
.state('view', {
url: '/view',
templateUrl: '/templates/view.ejs',
controller: 'ViewCtrl'
})
.state('quote', {
url: '/quote',
templateUrl: '/templates/quote.ejs',
controller: 'QuoteCtrl'
})
...
$urlRouterProvider.otherwise('index');
}]);
{
"dependencies": {
...
"debug": "~2.2.0",
"ejs": "~2.3.3",
"express": "~4.13.1",
...
}
}
然后我得到的错误是
GET http://example.azurewebsites.net/templates/index.ejs 404 (Not Found)
但同样,它在当地运作良好。 Azure可能只有一些版本的“ejs”吗?
在我的package.json(^ 1.0.0)中尝试使用旧版本的ejs也不起作用。
答案 0 :(得分:0)
似乎如果Azure无法解析文件扩展名,默认情况下它将响应404代码,而ejs模板文件只能由节点服务器解析。
由于node.js应用程序在由web.config
配置的Azure Web Apps上的iisnode上运行。
由于我的测试,我需要在web.config
中配置处理程序映射以让iisnode处理所有文件,然后我可以直接在浏览器上访问该文件,同时应用程序运行良好。
您可以使用FTP
工具或Kudu console
(https://<your_site_name>.scm.azurewebsites.net/DebugConsole
)来检查您的项目文件系统是否正确。如果您没有web.config
,请添加一个。
为了便于测试,我将入口文件index.html
和模板文件放在快速应用程序架构目录的公共文件夹中:
-|public/
|javasripts/
-angularApp.js
|templates/
-index.ejs
-index.html
web.config应该是:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
</appSettings>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>
<modules runAllManagedModulesForAllRequests="false" />
<iisnode watchedFiles="web.config;*.js;routes\*.js;views\*.jade"/>
<handlers>
<add name="iisnode" path="/bin/www" verb="*" modules="iisnode" />
</handlers>
<security>
<requestFiltering>
<hiddenSegments>
<remove segment="bin" />
</hiddenSegments>
</requestFiltering>
</security>
<rewrite>
<rules>
<clear />
<rule name="app" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
<match url="iisnode.+" negate="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="bin\www" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>