Azure Cosmos的Angular服务

问题描述

我真的对Angular陌生。我正在尝试创建一个我想在我的角度组件中使用的服务。这样做的时候,我的错误越来越小。

下面是我正在编写的代码

import { Injectable } from '@angular/core';
import { HttpClient} from '@angular/common/http';
import { CosmosClient } from '@azure/cosmos';
import {Observable,of} from 'rxjs'

@Injectable({
  providedIn: 'root'
})
export class ApiService {
  
  databaseId='dbname';
  containerId='Container Name';
  constructor() { }

  public async getProjects():Promise<Observable<any>>{
    const endpoint = "https://AAAA.documents.azure.com:443/";
    const key = "==";
    const client = new CosmosClient({ endpoint,key });
    const database = client.database(this.databaseId);
    const container = database.container(this.containerId);

    const querySpec = {query: "SELECT * from c where c.Category=\"Details\""};
    const { resources:items } = await container.items.query(querySpec).fetchAll();
    return of(items);
  }
  
}

我们非常感谢您的帮助。

Error Picture

解决方法

每个规则都有一个例外,但是直接从Web浏览器连接到DB的用例几乎接近零。这样,您将失去对用户可以在数据库中执行的操作的所有精细控制,而撤销访问的唯一方法是旋转密钥。您的数据库中目前可能没有任何敏感内容,但仍然被认为是不良做法。

因此,CosmosDB库与NodeJS作为服务器端框架兼容。它是否与Angular或React之类的前端框架一起工作都是偶然的。 Angular在版本9中编译项目的方式发生了一些大变化,看起来Cosmos客户端与新的Ivy编译器不兼容。

您在这里确实有几个选择。

  1. (推荐)在数据库和前端之间使用API​​层。您可以使用Node将其保留在Javascript中。如果您在Azure上运行,则可以使用Azure Functions之类的服务来使其更容易安全地实现,或者可以从相同的App Service,VM或正在使用的任何托管解决方案中运行它。
  2. Disable是新的Iv​​y编译器。您可以通过在angular.json中添加00007FF7475414B0 mov r8,rcx 00007FF7475414B3 lea rcx,[divtest_table_holder<unsigned int,5,9>::table (07FF7475433B0h)] 00007FF7475414BA vmovd xmm0,r8d 00007FF7475414BF vpbroadcastd ymm0,xmm0 00007FF7475414C4 vpmulld ymm2,ymm0,ymmword ptr [divtest_table_holder<unsigned int,9>::table+4h (07FF7475433B4h)] 00007FF7475414CD vpminud ymm1,ymm2,9>::table+28h (07FF7475433D8h)] 00007FF7475414D6 vpcmpeqd ymm2,ymm1,ymm2 00007FF7475414DA vpmovmskb eax,ymm2 00007FF7475414DE popcnt edx,eax 00007FF7475414E2 tzcnt eax,r8d 00007FF7475414E7 shr edx,2 00007FF7475414EA cmp eax,edx 00007FF7475414EC cmovl edx,eax 00007FF7475414EF movsxd rax,edx 00007FF7475414F2 mov ecx,dword ptr [rcx+rax*4] 00007FF7475414F5 imul rcx,r8 00007FF7475414F9 mov eax,edx 00007FF7475414FB shrx rcx,rcx,rax 00007FF747541500 mov qword ptr [rsp+8],rcx 00007FF747541505 mov dword ptr [rsp+8],edx 00007FF747541509 vzeroupper 00007FF74754150C ret 来实现此目的