Angular 应用程序能够访问 Microsoft Azure 中资产文件夹下的 json 文件

Posted

技术标签:

【中文标题】Angular 应用程序能够访问 Microsoft Azure 中资产文件夹下的 json 文件【英文标题】:Angular app being able to access json file under assets folder in Microsoft Azure 【发布时间】:2020-09-11 21:06:50 【问题描述】:

目前我有一个 Angular 9 应用程序,它能够访问位于 assets 文件夹下的 config.json 文件。我有负责从该文件读取的配置服务。当我在本地运行时,这没有问题。文件路径是/dist/assets/config.json。

但是,当我在 Azure 上将此应用程序部署为 Azure 应用程序服务(Windows 操作系统)时,即使我可以清楚地看到该文件位于 assets 文件夹下,该应用程序也无法找到此 config.json 文件。以下是每个文件的相关代码。当配置服务尝试获取文件 config.json 并显示错误消息时,代码会失败

Error occured while grabbing config files
config.service.ts:65 TypeError: You provided 'undefined' where a stream was expected. You can provide 
an Observable, Promise, Array, or Iterable.
at subscribeTo (subscribeTo.js:27)
at subscribeToResult (subscribeToResult.js:11)
at MergeMapSubscriber._innerSub (mergeMap.js:59)
at MergeMapSubscriber._tryNext (mergeMap.js:53)
at MergeMapSubscriber._next (mergeMap.js:36)
at MergeMapSubscriber.next (Subscriber.js:49)
at Observable._subscribe (subscribeToArray.js:3)
at Observable._trySubscribe (Observable.js:42)
at Observable.subscribe (Observable.js:28)
at MergeMapOperator.call (mergeMap.js:21)

appmodule.ts

 function configFactory(configService: ConfigService) 
    return () => configService.loadConfig();
      

 providers: [

  provide: APP_INITIALIZER,
  deps: [ConfigService],
  multi: true,
  useFactory: configFactory
,

配置服务.ts

 loadConfig() 
    return this.http.get<Config>("assets/config.json").subscribe(x=>
        console.log("Successfully grabbed config files");
        this.config=x;
    ,error=>
        console.log("Error in grabbing config files");
        console.log(error);
    );

web.config

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
 <system.webServer>
    <staticContent>
    <!-- this is so that app can find json file when deployed in azure -->
        <mimeMap fileExtension=".json" mimeType="application/json" />
    </staticContent>
 </system.webServer>

angular.json

          "assets": [
          "src/favicon.ico",
          "src/assets",
          "src/web.config"
        ],

我也提到了这个链接Angular app unable to find asset files on Azure,但那里提出的解决方案在我的情况下不起作用。我还在 tsconfig.app.json 文件中设置了 "allowSyntheticDefaultImports": true 。

【问题讨论】:

你上面粘贴的错误没有出现在本地? @AakashGarg 它没有给出任何错误。它可以毫无问题地访问该文件。 你的项目可以从assets文件夹中加载图片吗? 为访问该 json 而形成的 url 是否正确?你检查网络标签? 你的天蓝色的项目名称是什么? 【参考方案1】:

ng build --prod --base-href /unrc-willis-web/

或者试试

ng build --prod --base-href "./"

拦截器也有问题。拦截器被用于非必需调用

【讨论】:

构建失败,因为它不喜欢第二个参数。我认为我们需要找出以某种方式找到该位置的相对路径。 是的,然后从中删除 --prod。可能是您的代码不兼容。参考devblogs.microsoft.com/premier-developer/… 发生未处理的异常:项目“./”不支持“构建”目标。 请注意我正在使用 AzureDevops 构建并且代码存储库在 Git 中 您可以尝试直接在浏览器中从 azure url 访问您的 json 吗?

以上是关于Angular 应用程序能够访问 Microsoft Azure 中资产文件夹下的 json 文件的主要内容,如果未能解决你的问题,请参考以下文章

从 Angular 表达式访问窗口

CORS 不适用于 .NET Core API 和 Angular 前端

Angular 4 Decorator 无法访问类范围

Angular2 - 应该在模板中访问私有变量吗?

Angular 混合应用程序 - Angular 2 路由器不工作

.Net Core 2 JWT,Angular 2 通过角色授权不起作用