2013-06-11 38 views
7

Tôi đã thiết lập một cơ sở dữ liệu CouchDB cục bộ và tôi muốn sao chép nó vào cơ sở dữ liệu PouchDB, sử dụng JavaScript trong một trang web chạy trên máy chủ cục bộ.Làm cách nào để sao chép từ CouchDB sang PouchDB?

Với mã dưới đây, tôi nhận được lỗi này:

Origin http://localhost is not allowed by Access-Control-Allow-Origin.

Với http:// khỏi REMOTE, tôi không nhận được một lỗi, nhưng không có tài liệu được trình bày như nhân rộng.

Nhìn vào cơ sở dữ liệu IndexedDB từ Chrome DevTools, tôi có thể thấy cơ sở dữ liệu đã được tạo (nhưng dường như không có tài liệu).

Chạy trong Chrome 29.0.1535.2 canary.

Tôi có thể thực hiện việc này cục bộ hay tôi cần thiết lập cơ sở dữ liệu CouchDB từ xa và bật CORS (theo số CouchDB docs)?

var REMOTE = 'http://127.0.0.1:5984/foo'; 
var LOCAL = 'idb://foo'; 

Pouch(LOCAL, function(error, pouchdb){ 
    if (error) { 
    console.log("Error: ", error); 
    } else { 
    var db = pouchdb; 
    Pouch.replicate(REMOTE, LOCAL, function (error, changes) { 
     if (error) { 
     console.log('Error: ', error); 
     } 
     else { 
     console.log('Changes: ', changes); 
     db.allDocs({include_docs: true}, function(error, docs) { 
      console.log('Rows: ', docs.rows); 
     }); 
    }}); 
    } 
}); 

Trả lời

10

Bạn có thể thực hiện tại địa phương, nhưng CORS phải được bật.

Khi bạn xóa "http: //" khỏi URL từ xa, Pouch sẽ nhân rộng DB của bạn thành một Pouchdb được IndexedDB hỗ trợ mới có tên "localhost" (hoặc thực sự "_pouch_localhost" hoặc một cái gì đó tương tự - nó thêm tiếp đầu ngữ). Trừ khi bạn đang phục vụ trang này từ chính CouchDB (trên cùng một cổng máy chủ &), bạn sẽ cần phải kích hoạt CORS để có được bản sao để CouchDB làm việc.

+0

Tôi có thể bật CORS cho máy chủ CouchDB trên máy chủ cục bộ không? Đã thử cho phép CORS từ Futon (httpd> cors thành true và cors> thông tin xác thực cả true và false) nhưng vẫn gặp lỗi: 'OPTIONS http://127.0.0.1:5984/presentations/ 405 (Phương thức không được phép) pouchdb-night. min.js: 1 TÙY CHỌN http://127.0.0.1:5984/presentations/ Xuất xứ http: // localhost không được Access-Control-Allow-Origin cho phép. pouchdb-nights.min.js: 1 XMLHttpRequest không thể tải http://127.0.0.1:5984/foo/. Không cho phép xuất xứ http: // localhost bằng Access-Control-Allow-Origin. localhost/node/foo /: 1 ... Object {status: 0} ' –

+0

Nó không nên khác biệt trên localhost. Có thể thử khởi động lại Couch sau khi đặt 'httpd> enable_cors = true' trong cấu hình? – chesles

+0

Cảm ơn @chesles - gợi ý tốt, nhưng đã thử khởi động lại CouchDB (và máy đang chạy!) Nhưng vẫn nhận được lỗi xuất xứ chéo: 'XMLHttpRequest không thể tải http://127.0.0.1:5984/foo/. Không cho phép xuất xứ http: // localhost bằng Access-Control-Allow-Origin.' Tôi đã kiểm tra trong Futon khi khởi động lại: httpd> enable_cors là true –

Các vấn đề liên quan