405方法不允许从javascript获取couchdb文档

时间:2017-05-30 13:05:17

标签: javascript get couchdb vuejs2

我正在使用quasar-framework proyect和一个名为 product 的couchdb数据库。

我尝试对某个文档发出 GET 请求,但我遇到以下错误:

错误

:8080/#/:1 XMLHttpRequest cannot load http://localhost:5984/product. Response for preflight has invalid HTTP status code 405

vue-resource.es2015.js?fc90:1085 OPTIONS http://localhost:5984/product 405 (Method Not Allowed)

Index.vue

    getProyect() {
        var deferred = Q.defer()
        var url = "http://localhost:5984/product/product1"
        Vue.http.get(url)
        .then(
            function (response) {
                deferred.resolve(response.data)
                console.log("success getting response")
            },
            function (error) {
                var msg = 'N/A'
                console.log('ERROR get:', error)
                deferred.reject(msg)
            }
        )
        return deferred.promise
    }

- 通过 postman 执行相同的请求。

您可以使用curl查看cors配置:

curl -X GET admin:admin@localhost:5984/_config/cors
//Output
{"credentials":"true","origins":"*","headers":"accept, authorization, content-type, origin, referer, x-csrf-token","methods":"GET, PUT, POST, HEAD, DELETE, OPTIONS"}

我还遇到了允许couchdb服务器上的cors并通过编辑 local.ini 来解决它的问题,但是这个人不知道如何修复它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我使用nginx作为couchdb的反向代理解决了这个问题。现在我的应用程序在端口80上运行。

/etc/nginx/sites-enabled/default我已添加:

location /couchdb {
    rewrite /couchdb/(.*) /$1 break;
    proxy_pass http://localhost:5984;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

现在我的 Index.vue 看起来像是:

getProyect() {
    var deferred = Q.defer()
    var url = "http://localhost/couchdb/product/product1" //where db = product documentID = product1
    Vue.http.get(url)
    .then(
        function (response) {
            deferred.resolve(response.data)
            console.log("success getting response")
        },
        function (error) {
            var msg = 'N/A'
            console.log('ERROR get:', error)
            deferred.reject(msg)
        }
    )
    return deferred.promise
}

消息来源https://cwiki.apache.org/confluence/display/COUCHDB/Nginx+as+a+proxy

编辑:另一种解决方案只是使用PouchDB客户端。