问题描述
我真的对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);
}
}
我们非常感谢您的帮助。
解决方法
每个规则都有一个例外,但是直接从Web浏览器连接到DB的用例几乎接近零。这样,您将失去对用户可以在数据库中执行的操作的所有精细控制,而撤销访问的唯一方法是旋转密钥。您的数据库中目前可能没有任何敏感内容,但仍然被认为是不良做法。
因此,CosmosDB库与NodeJS作为服务器端框架兼容。它是否与Angular或React之类的前端框架一起工作都是偶然的。 Angular在版本9中编译项目的方式发生了一些大变化,看起来Cosmos客户端与新的Ivy编译器不兼容。
您在这里确实有几个选择。
- (推荐)在数据库和前端之间使用API层。您可以使用Node将其保留在Javascript中。如果您在Azure上运行,则可以使用Azure Functions之类的服务来使其更容易安全地实现,或者可以从相同的App Service,VM或正在使用的任何托管解决方案中运行它。
- Disable是新的Ivy编译器。您可以通过在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
来实现此目的