如何在CouchDB中使用angular2+创建数据库?

s2j5cfk0  于 2022-12-09  发布在  CouchDB
关注(0)|答案(1)|浏览(136)

我正在尝试使用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)

有人能帮我怎么做吗?2我已经添加了下面的代码。

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>
4zcjmb1e

4zcjmb1e1#

您的代码实际上并没有尝试创建数据库,而是尝试向现有数据库添加文档(书籍)。创建数据库和插入大量文档不能在一个HTTP调用中完成。我将回答如何从Angular创建CouchDB数据库的问题。
要创建数据库,需要CouchDB服务器管理员权限。因此,您需要提交相应的凭据(用户名和密码)以及HTTP请求。存在不同的身份验证方法,但您可以从基本身份验证开始,这是一种快速简单的CouchDB身份验证方法。
在Angular代码中,使用HttpClient.put()方法向CouchDB发送PUT请求。该请求还应包含一个options对象,该对象包含一些必需的HttpHeaders以及withCredentials: true属性。该options对象可以按如下方式创建。显然,需要用真实的值替换“:“。

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 };
}

请看开源项目Koia中的CouchDBService。它更详细地说明了如何从Angular与CouchDB通信。该类实际上还包含一个createDatabase方法。
要使HTTP请求正常工作,请确保通过更改配置文件$COUCHDB_HOME/etc/local.ini中的[http]和[cors]条目来配置CORS,如此处所述。

相关问题