繁体   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