繁体   English   中英

Angular 服务与 Azure 宇宙

[英]Angular Service with 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);
  }
  
}

非常感谢任何帮助。

错误图片

每个规则都有一个例外,但是直接从 web 浏览器连接到数据库的用例几乎为零。 这样一来,您就失去了对用户在您的数据库中可以做什么的所有细粒度控制,而撤销访问权限的唯一方法是轮换您的密钥。 您的数据库中目前可能没有任何敏感的内容,但这仍然被认为是不好的做法。

出于这个原因,CosmosDB 库与作为服务器端框架的 NodeJS 兼容。 它是否适用于 Angular 或 React 等前端框架是偶然的。 Angular 在版本 9 中编译项目的方式发生了一些较大的变化,看起来 Cosmos 客户端与新的 Ivy 编译器不兼容。

你在这里有几个选择。

  1. (推荐)在数据库和前端之间使用 API 层。 您可以使用 Node 将其保存在 Javascript 中。 如果您在 Azure 上运行,则有诸如 Azure 之类的服务可以使这更容易安全地实施,或者您可以从相同的应用程序服务、VM 或您正在使用的任何托管解决方案中运行它。
  2. 禁用新的 Ivy 编译器。您可以通过在 angular.json 中添加aot: false来执行此操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM