У меня есть приложение, написанное на Angular 4, которое вызывает CouchDB на локальном хосте, но с разными портами.
Я использую CouchDB с приложением Aurelia без каких-либо проблем.
Теперь, когда я перехожу на Angular 4 и Angular MD, я могу решить эту проблему.
Вот код, который вызывает Couchdb
private commonUpdate (содержимое: любое, URL: строка, метод: строка = 'put') {
console.log("in common") const myHeaders = new Headers(); myHeaders.append('Content-Type', 'application/json'); const options = new RequestOptions({ headers: myHeaders, withCredentials: true }); if (content && content._rev && content._rev.length >= 5) { url = url + '/' + content._id; } const status = new DbStatus(); status.ok = false; let response: any; try { if (content) { const contentJson: string = JSON.stringify(content); this.http.post(url, contentJson, options).map(res => res.json()).subscribe(data => { console.log(data['results']); }) } status.ok = this.isHttpStatusSuccess(response.status); if (status.doc) { if (Array.isArray(status.doc.docs)) { if (status.doc.docs.length === 0) { status.ok = false; status.reason = 'Empty Array'; if (!status.error) status.error = status.reason; } } } status.httpStatus = response.status; status.response = response; } catch (error) { status.ok = false; }
Сообщение об ошибке:
VM27427:1 XMLHttpRequest не может загрузить localhost:5984/_session. Запросы между источниками поддерживаются только для схем протоколов: http, data, chrome, chrome-extension, https.
[cors]
origins = *
credentials = true
headers = accept, authorization, content-type, origin, referer
Couch-Rev, Set-Cookie
methods = GET, PUT, POST, HEAD, DELETE
Я не понимаю, почему это работает. Опять же, скрипач не показывает запрос метода предварительной проверки OPTION.
Однако запуск метода OPTION из почтальона возвращает разрешенные методы GET и HEAD. Возможно, браузер кеширует его, но у меня открыты инструменты разработчика с включенной настройкой отключения кеширования.
Предложения