在上一篇文章中,您已被介紹給CouchDB。這次,您將創建一個成熟的應用程序,可以在其中應用自己學到的知識。您還將學習如何在教程結束時確保數據庫。
>
鑰匙要點該項目的完整源代碼可在GitHub上獲得。
如果您沒有設置良好的,孤立的開發環境,建議您使用宅基地改進。 >
盒子沒有安裝CouchDB,因此您需要手動執行此操作;但不只是普通的couchdb。該應用需要與GEO數據(緯度和縱向)一起工作:您將為CouchDB提供來自Google Maps的邊界框信息。邊界框表示當前正在地圖中顯示的區域,並且所有先前的坐標用戶都將添加到該區域的區域也將顯示在地圖上。 CouchDB默認無法做到這一點,這就是為什麼您需要安裝稱為GeoCouch的插件以給Couchdb給一些空間超級大國。
最簡單的方法是通過Geocouch Docker容器的方式。您也可以嘗試手動安裝Geocouch,但它要求您從源安裝CouchDB並手工配置。除非您有Unix鬍鬚,否則我真的不會推薦這種方法。
繼續將Docker安裝到您正在使用的VM中,然後在完成後返回這裡。
首先,克隆回購併在創建的目錄中導航。
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
您需要這樣做,因為當前正在使用的下載URL已經失敗。
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
構建docker映像:
>這將需要一段時間,具體取決於您的互聯網連接,因此請抓住小吃。完成後,創建容器並啟動它:
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
>一旦啟動,您可以通過執行以下命令來查看它是否正在運行:
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
>在VM外部,如果您正確地轉發了端口,那將是:
><span>curl localhost:5984 </span>
它應該返回以下內容:
><span>curl 192.168.33.10:5984 </span>
請注意,我將在整篇文章中不斷提及192.168.33.10。這是分配給Scotchbox的IP,這是我使用的Vagrant框。如果您正在使用Homestead改進,則IP為192.168.10.10。您可以使用此IP訪問該應用。如果您完全使用其他東西,請根據需要進行適應。
><span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>
>
>您將使用細長的框架來加快應用程序的開發。使用作曲家創建一個新項目:
php <span>composer create-project slim/slim-skeleton pokespawn </span>
>從瀏覽器中訪問Futon,並創建一個名為Pokespaing的新數據庫。創建後,進入數據庫中並創建一個新視圖。您可以通過單擊“視圖下拉”並選擇臨時視圖來做到這一點。在TextAarea中添加以下圖表功能:
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
完成後,單擊保存為按鈕,將口袋妖怪作為設計文檔的名稱,然後by_name作為視圖名稱。按ON保存以保存視圖。稍後,您將使用此視圖根據用戶輸入的內容建議口袋妖怪名稱。
接下來,創建一個設計文檔,用於響應空間搜索。您可以通過在“視圖下拉”中選擇設計文檔,然後單擊新文檔來做到這一點。在為創建設計文檔的頁面中,單擊“添加字段”按鈕並將空間添加為字段名稱,並將以下為值:
該設計文檔利用GeoCouch提供的空間功能。它要做的第一件事是檢查文檔中是否有LOC字段。 LOC場是一個包含特定位置的坐標的數組,其中的第一個項目包含緯度,第二個項目包含經度。如果該文檔符合此條件,則使用EMIT()函數,就像普通視圖一樣。關鍵是一個geojson幾何形狀,值是一個包含口袋妖怪和精靈名稱的數組。
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
>向設計文檔提出請求時,需要指定具有JSON數組格式的start_range和end_range。每個項目可以是數字或零項目。如果您想要開放範圍,則使用零。這是一個示例請求:
及其輸出:
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
如果您想了解更多有關GeoCouch可以執行哪些特定操作的信息,請務必閱讀文檔或Wiki。
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
>現在您已經準備好編寫一些代碼了。首先,您要查看後端的代碼,然後轉到前端代碼。
>該應用需要一些口袋妖怪數據才能在數據庫中使用,因此需要僅在本地執行的腳本。在項目目錄的根部創建一個poke-importer.php文件,並添加以下內容:
><span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
此腳本向Pokemon API的Pokedex端點提出了請求。此端點需要您希望它返回的Pokedex版本的ID。由於當前只有口袋妖怪GO允許玩家從第一代捕獲口袋妖怪,因此將2作為ID提供。這將返回原始口袋妖怪遊戲的關東地區的所有口袋妖怪。然後循環瀏覽數據,提取所有必要的信息,保存精靈,並使用提取的數據製作新文檔。
>打開src/doutes.php文件,並添加以下路由:
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
>家庭控制器
>家庭控制器使用通過構造函數傳遞的$渲染器來渲染應用程序的主頁。它還使用您將在短期內創建的DB類。
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
>與Couchdb
交談>在班上,創建一個新的guzzle客戶端。您正在使用Guzzle,而不是用於CouchDB的一些PHP客戶
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
config來自項目根部的.env文件。這包含couchdb的基本URL。
<span>curl localhost:5984 </span>
> searchPokemon負責返回自動符號功能使用的數據。由於CouchDB實際上並不支持您在SQL中使用的類似條件,因此您使用了一些駭客來模仿它。這裡的訣竅是使用start_key和end_key,而不是僅返回精確匹配的鍵。 FFF0是在基本多語言平面末端分配的特殊Unicode字符之一。這使其成為在搜索實際字符串結束時附加附加的良好候選者,這使得其餘的字符由於其高價值而成為可選的。請注意,此hack僅適用於簡短的單詞,因此足以搜索口袋妖怪名稱。
<span>curl 192.168.33.10:5984 </span>
> SavePokeMonLocation保存Google Map Marker當前指向的坐標以及名稱和精靈。還添加了DOC_TYPE字段,以輕鬆檢索與位置相關的所有文檔。
<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>
> iSvalidCoordinates檢查緯度和經度值是否具有有效的格式。
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
fetchpokemons是向您之前創建的空間搜索的設計文檔請求的功能。在這裡,您將西南坐標指定為start_range和東北坐標的值作為end_range的值。響應也僅限於前100行,以防止要求過多數據。之前,您還看到CouchDB返回的一些數據確實不需要。提取然後僅返回前端所需的數據將很有用。我選擇將其作為另一天的優化。
># Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
> handleresponse將couchdb返回的JSON字符串轉換為數組。
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
最後,將家用控制器注入容器中。您可以通過打開src/depentencies.php文件並將以下內容添加到底部:
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
>主頁模板
<span>curl localhost:5984 </span>
>
中的>對於主JavaScript文件(public/js/main.js),首先創建用於存儲值的變量,您將需要在整個文件中需要。
><span>curl 192.168.33.10:5984 </span>
>為用戶想要添加的PIN點位置創建標記。然後,添加一個事件偵聽器,用於打開模式以添加標記時添加位置:
<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>
php <span>composer create-project slim/slim-skeleton pokespawn </span>
fetchpokemon函數負責獲取以前在地圖當前可查看區域中繪製的口袋妖怪。
<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv </span>
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
這是用於添加用於輸入口袋妖怪名稱的文本字段的自動挑戰功能的代碼。指定RenderItem函數以自定義用於渲染每個建議的HTML。這使您可以將Pokemon的ID添加為數據屬性,然後使用該屬性來設置Pokemon_ID字段的值。
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
固定Couchdb
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
>如果您在CouchDB安裝上還沒有服務器管理員:
<span>curl localhost:5984 </span>
yikes,對嗎?好消息是一個簡單的修復。您要做的就是創建服務器管理員。您可以使用以下命令進行操作:
<span>curl 192.168.33.10:5984 </span>
上面的命令創建一個名為“ kami”的新服務器,並使用密碼“ mySuperSecurePassword”。
<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>
如果成功,它將返回類似於以下的響應:
>php <span>composer create-project slim/slim-skeleton pokespawn </span>
>現在您可以使用其他數據庫名稱嘗試相同的命令:
<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv </span>
>
<span>function(doc){ </span> <span>if(doc.doc_type == 'pokemon'){ </span> <span>emit(doc.name, null); </span> <span>} </span><span>} </span>
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
好,就是這樣嗎?好吧,這並不是因為您唯一完成的是只能由服務器管理員完成的限制數據庫操作。這包括創建新數據庫,刪除數據庫,管理用戶,對所有數據庫(包括系統表),對所有文檔的CRUD操作的全部訪問。這會讓您擁有未經身份驗證的用戶仍然有能力在任何數據庫上做CRUD的事情。您可以通過登錄Futon來嘗試一下,選擇要弄亂的數據庫並在其中做CRUD的工作。 CouchDB仍然會為您愉快地執行這些操作。
>那麼,如何修補剩餘的孔?您可以通過創建設計文檔來完成此操作,該文檔將檢查試圖執行寫操作(插入或更新)的用戶的用戶名與允許這樣做的用戶的名稱相同。在Futon中,使用服務器管理員或數據庫管理帳戶登錄,選擇要使用的數據庫,然後創建一個新的設計文檔。將ID設置為_design/blockanonymouswrites,添加一個名為validate_doc_update的字段,並將值設置為以下內容:
># Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
>該文檔的新版本,現有文檔和用戶上下文作為參數傳遞給此功能。您唯一需要檢查的是包含數據庫名稱,執行操作的用戶名的名稱以及分配給用戶的一系列角色的userctx。
>由於您僅檢查用戶名,因此您可能會認為攻擊者可以簡單地猜測用戶名並為密碼提供任何價值,並且它將起作用。好吧,不是真的,因為CouchDB首先檢查設計文檔甚至執行之前的用戶名和密碼是否正確。 >
或者,如果您在一個數據庫中有很多用戶,也可以檢查角色。下面的功能將向任何沒有“ Pokemon_master”角色的用戶丟棄錯誤。
如果您想了解有關如何保護CouchDB的更多信息,請務必查看以下資源: >讓我們結束該應用程序以使用應用於數據庫的安全措施。首先更新.ENV文件:僅使用IP地址和端口更改base_uri,然後添加您創建的CouchDB用戶的用戶名和密碼。
>
>如何記錄口袋妖怪產生位置? >我可以使用Pokemon Spawn位置數據來預測未來的產卵嗎? >我如何使用Pixelmon mod查找生成位置? > theorshare Pokemon Go Map是什麼?它如何工作?
保護應用程序
<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
您在項目中使用CouchDB嗎?做什麼的?有什麼建議 /功能可以添加到我們這個小項目中嗎?在評論中讓我們知道! >
> Pokemon GO中的Biome是什麼,它如何影響Spawn Locations? >口袋妖怪GO中的生物群落是一個特定的地理區域,它影響那裡的口袋妖怪產卵類型。例如,水型口袋妖怪更有可能在水體附近產卵,而基層的口袋妖怪更有可能在公園或森林中產生。了解不同的生物群落可以幫助您預測某些類型的口袋妖怪可能產生的位置。
您可以使用各種方法記錄Pokemon Spawn位置。一種方法是使用CouchDB之類的數據庫存儲口袋妖怪產卵的位置。這涉及使用Pokemon GO API檢索產卵數據,然後將此數據存儲在CouchDB中。然後,您可以使用此數據來分析產卵模式並預測未來的生成位置。
>
是否存在與使用第三方應用程序或網站查找口袋妖怪產卵位置有關的風險?這些服務可能違反口袋妖怪GO服務條款,並可能導致禁令。此外,這些服務可能並不總是提供準確或最新的信息。
Minecraft的Pixelmon mod允許您找到遊戲中的口袋妖怪產卵位置。該mod包含一個功能,該功能在地圖上顯示了口袋妖怪的產卵位置。您可以使用此功能在遊戲中查找和捕獲口袋妖怪。
Tenorshare Pokemon Go Map是第三方服務這提供了口袋妖怪產卵位置的地圖。該地圖是實時更新的,其中包括有關產卵及其確切位置的口袋妖怪類型的信息。但是,請注意,使用此服務可能會違反Pokemon GO的服務條款,並且可能會導致禁令。
>我如何使用Pogomap網站查找Pokemon Spawn Locations? Pogomap網站提供了口袋妖怪產卵位置的地圖。該地圖是實時更新的,其中包括有關產卵及其確切位置的口袋妖怪類型的信息。您可以使用此網站在您所在的地區找到並捕獲口袋妖怪。 >我可以為Pogomap網站做貢獻嗎?
是的,您可以通過報告Pokemon Spawn Locations來為PogoMap網站做出貢獻。這有助於使地圖保持最新和準確。但是,請注意,報告虛假信息可能會導致網站禁令。 >是否還有其他方法可以查找口袋妖怪產生位置? 是的,還有其他用於查找Pokemon Spawn的方法位置。例如,您可以加入當地的Pokemon GO社區或論壇,玩家共享有關生成位置的信息。您還可以使用附近的遊戲中的功能來查找靠近您當前位置的口袋妖怪。
以上是如何使用CouchdB創建口袋妖怪Spawn位置錄音機的詳細內容。更多資訊請關注PHP中文網其他相關文章!