2017-07-30 15 views
1

我有一個用Angular 4編寫的應用程序調用本地主機但不同端口上的couchdb。角4呼叫couchdb有CORS錯誤,但沒有預檢顯示在提琴手

我一直在使用couchdb與Aurelia應用程序沒有任何問題。

現在我正在切換到Angular 4和Angular MD,我似乎可以通過這個cors問題。

這裏是調用的CouchDB

私人commonUpdate代碼(含量:任何,網址:串,方法:串= '把'){

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 

我不明白爲什麼這個工作。 再次fiddler不顯示預檢OPTION方法請求。

但是,從郵遞員運行OPTION方法返回允許GET和HEAD的方法。也許瀏覽器緩存它,但我的開發工具打開緩存禁用設置選中。

建議

回答

2

VM27427:1周的XMLHttpRequest不能加載本地主機:5984/_session。協議方案僅支持跨源請求:http,data,chrome,chrome-extension,https。

這聽起來像問題僅僅是你給到你的代碼中調用this.http.post的URL沒有協議的一部分,也就是說,你只給localhost:5984/_session呼叫,但你應該給它http://localhost:5984/_session。你只需要添加http://

因此,至於爲什麼你沒有看到OPTIONS請求,我想這只是因爲瀏覽器在嘗試OPTIONS之前停止 - 因爲沒有在URL中的協議部分,瀏覽器甚至不能確定是否您提供的網址是否是跨網站的。