2017-08-22 45 views
0

我必須創建一個脫機應用程序,它可以與另一個在線應用程序同步。如何在兩個不同的React應用程序中使用同一個數據庫

我使用PouchDB開發了離線應用程序。我創建這個應用感謝github回購create-react-app。這個應用程序運行在localhost:3000。在這個應用程序中,我創建並管理了一個名爲「patientDB」的小數據庫。

我管理與經典put方法分貝就像我們可以在文檔中看到:

var db = new PouchDB('patientDB') 
db.put({ 
_id: '[email protected]', 
name: 'David', 
age: 69 
}); 

隨着由PouchDB給出鉻的開發工具,我可以看到DB工作像我想要(文檔被創建):

Db overview

的其它應用是彼此反應應用與節點服務器。在開發過程中,這個應用程序在localhost:8080上運行。 在這個程序我嘗試獲取包含在「patientDB」的所有文檔用下面的代碼:

const db = new PouchDB('patientDB', { skip_setup: true }); 
    db.info() 
    .then(() => { 
    console.log("DBFOUND") 
    db.allDocs({include_docs: true}) 
    .then(function (result) { 
     console.log("RESULT" , result) 
    }).catch(function (err) { 
     console.log("NOPE") 
     console.log(err); 
    }); 
    }) 

我的問題是,我不能讓「patientDB」與離線應用程序中創建在線應用程序。當我執行var db = new PouchDB ('patientDB')時,它創建一個新的空數據庫,因爲它找不到已經存在的數據庫。

我使用谷歌瀏覽器來運行我所有的應用程序,所以我認爲可以共享數據庫。

不過,我沒少和非常簡單的測試有兩個HTML文件:

First.html其初始化一個新的數據庫與文檔
Second.html其讀取數據庫中創建First.html
在這種情況下,即使是兩個分開的「網站」,我也可以使用Second.hmtl中的First.html獲取文檔。

我認爲它在本地主機運行應用程序就像是孤立即使像我之前說的,我用我所有的應用程序相同的瀏覽器應用程序的其餘部分的...

我不不知道該怎麼做,或者我不知道是否可以做我想做的事情。如果有人有我的想法,我會很高興。


編輯

我明白爲什麼我的DB不共享:
當我看着我的所有本地數據塊上運行的HTML文件,我可以看到下面的東西后:
local db

如我們所見,DB來自文件_pouch_DB_NAME - file://

當我ch從localy運行(本地主機)的應用ECK我的數據庫,我可以看到這一點:
db from localhost

的DB不是來自文件,而是來自localhost:8080
如果你知道如何從本地數據庫中讀取DOC一個運行在服務器上的應用程序,它可能對我非常有幫助!

回答

1

PouchDB在瀏覽器中使用IndexedDB,它遵循同源策略。 MDN says this:

IndexedDB遵循同源策略。來源是正在執行腳本的文檔的URL的域,應用層協議和端口。每個起源都有自己關聯的一組數據庫。每個數據庫都有一個名稱,可以在原點中標識它。

因此,您必須將本地數據庫複製到中央服務器以共享數據。這可能是一個PouchDB Server連同你的節點應用程序。您也可以從瀏覽器直接訪問PouchDB服務器:

var db = new PouchDB('http://localhost:5984/patientDB') 

作爲替代方案,可以使用CouchDB的或IBM Cloudant(這基本上是託管CouchDB的)。

相關問題