Я установил новую CouchDB на своем локальном компьютере. Когда я пытаюсь загрузить новые документы в существующую базу данных, используя метод HTTP POST, CouchDB отклоняет запрос и утверждает, что это был метод HTTP OPTIONS.
Машинопись классов
Мой класс обслуживания выглядит следующим образом.
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class DbService {
private static readonly BASE_URL = 'http://localhost:5984/';
private static readonly ENTRIES_URL = DbService.BASE_URL + 'entries';
constructor(private http: HttpClient) { }
writeEntry(entry: Object): Promise<Object> {
return this.http.post<Object>(DbService.ENTRIES_URL, entry).toPromise();
}
}
Служба используется следующим методом, расположенным в классе компонентов.
private onEntry(entry: Object): void {
try {
console.log('onEntry', entry);
this.dbService.writeEntry(entry)
.then(r => console.log(r))
.catch(e => console.error(e));
} catch (error) {
console.error(error);
}
}
То, что я пробовал до сих пор
- Используя Fauxton, я создал новую базу данных с именем записи
- Я успешно загрузил новые документы в базу данных records , используя curl следующим образом
curl -H 'Content-Type: application/json' -X POST
http://127.0.0.1:5984/entries -d '{ "amount": 1 }'
- При запуске углового кода (например, браузер Chrome)
Последняя попытка
При изменении моего метода обслуживания следующим образом, метод POST наконец переносится на провод, но CouchDB регистрирует HTTP 415 (неподдерживаемый тип носителя)
writeEntry(entry: Object): Promise<Object> {
const httpHeaders = new HttpHeaders();
httpHeaders.set('Accept', 'application/json');
httpHeaders.set('Content-type', 'application/json');
const httpOptions = {
headers: httpHeaders
};
return this.http.post<Object>(DbService.ENTRIES_URL, JSON.stringify(entry), httpOptions).toPromise();
}
[notice] 2019-04-09T13:35:59.312000Z couchdb@localhost 9910b3c996 localhost:5984 127.0.0.1 undefined POST /entries 415 ok 3