[英]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.