簡體   English   中英

如何在 CouchDB 中使用 angular2+ 創建數據庫?

[英]How to create database using angular2+ in CouchDB?

我正在嘗試使用 angular2+ 在 couchdb 中創建一個數據庫。 單擊應該創建數據庫的按鈕時,我創建了一個按鈕。 但我收到錯誤。

"ERROR Error: Uncaught (in promise): HttpErrorResponse: {"headers":{"normalizedNames":{},"lazyUpdate":null},"status":401,"statusText":"Unauthorized","url":"http://127.0.0.1:5984/myproject","ok":false,"name":"HttpErrorResponse","message":"Http failure response for http://127.0.0.1:5984/myproject: 401 Unauthorized","error":{"error":"unauthorized","reason":"You are not a server admin."}}"
at resolvePromise (zone.js:831)
at eval (zone.js:741)
at eval (zone.js:757)
at ZoneDelegate.invoke (zone.js:391)
at Object.onInvoke (core.js:4760)
at ZoneDelegate.invoke (zone.js:390)
at Zone.run (zone.js:150)
at eval (zone.js:889)
at ZoneDelegate.invokeTask (zone.js:423)
at Object.onInvokeTask (core.js:4751)

有人可以幫我怎么做嗎? 我在下面添加了代碼。

import { Component } from "@angular/core";
import { HttpClient } from "@angular/common/http";
interface Resp {
id: string;
ok: boolean;
rev: string;
}
@Component({
selector: "app-databasse",
templateUrl: "./databasse.component.html",
styleUrls: ["./databasse.component.css"]
})
export class DatabasseComponent {
constructor(private http: HttpClient) {}
books = [
{ id: 1, name: "Core Java" },
{ id: 2, name: "Angular 2" },
{ id: 3, name: "Hibernate" }
];

async createDatabase(): Promise<Resp> {
return new Promise<Resp>((resolve, reject) => {
    this.http.put<Resp>(`http://127.0.0.1:5984/myproject`, this.books).subscribe(
        res => {
            console.log('created document: ' + res.id)
            resolve(res)
        },
        err => {
            reject(err)
        }
    )
 })
 }
 }
------template file------
<p>
<button (click)="createDatabase()">createDatabase</button>
</p>

您的代碼並沒有真正嘗試創建數據庫,而是嘗試將文檔(書籍)添加到現有數據庫中。 創建數據庫和插入大量文檔不能在單個 HTTP 調用中完成。 我將回答有關如何從 Angular 創建 CouchDB 數據庫的問題。

創建數據庫,需要 CouchDB 服務器管理員權限。 因此,您需要連同您的 HTTP 請求一起提交相應的憑據(用戶名和密碼)。 存在不同的身份驗證方式,但您可以從基本身份驗證開始,這是一種使用 CouchDB 進行身份驗證的快速簡單的方式。

在您的 Angular 代碼中,您使用HttpClient.put()方法向 CouchDB 發送 PUT 請求。 此請求還應包括一個options object ,其中包含一些必需的HttpHeaders以及屬性withCredentials: true options object 可以按如下方式創建。 您顯然需要用實際值替換“:”。

createHttpOptions(): any {
  let httpHeaders = new HttpHeaders();
  httpHeaders = httpHeaders.set('Accept', 'application/json');
  httpHeaders = httpHeaders.set('Content-type', 'application/json');
  httpHeaders = httpHeaders.set('Authorization', 'Basic ' + btoa("<username>:<password>"));
  return { headers: httpHeaders, withCredentials: true };
}

請查看開源項目CouchDBService中的CouchDBService 它更詳細地說明了如何從 Angular 與 CouchDB 通信。 class 實際上還包含一個createDatabase方法。

要使您的 HTTP 請求正常工作,請確保通過更改配置文件 $COUCHDB_HOME/etc/local.ini 中的 [http] 和 [cors] 條目來配置 CORS,如此所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM