Я установил новую 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.info('onEntry', entry);
this.dbService.writeEntry(entry)
.then(r => console.info(r))
.catch(e => console.error(e));
} catch (error) {
console.error(error);
}
}
Что я пробовал до сих пор
curl -H 'Content-Type: application/json' -X POST http://127.0.0.1:5984/entries -d '{ "amount": 1 }'
Последняя попытка
При изменении моего метода обслуживания следующим образом метод 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
Это может быть связано с проблемами CORS.
Попробуйте включить CORS на HTTP-сервере CouchDB: https://docs.couchdb.org/en/stable/config/http.html#config-cors
Эта функция была встроена в https://issues.apache.org/jira/browse/COUCDB-431.
Теперь он работает после определения [cors] в etc\local.ini и больше не преобразует отправленный объект JSON в строку, спасибо за вашу помощь! [cors]\n origins = * методы = GET,POST,PUT учетные данные = false