使用Node.Js構建IPFS應用程式

買賣虛擬貨幣

簡介

IPFS是一個遊戲改變者。與當今的web相比,IPFS實際上可以實現一個分散式的、永久的web。 IPFS利用點對點架構,其中每個節點既是客戶端又是伺服器。 如果您從網路請求某些內容,則將您請求的內容提供給其他節點。

除了點對點體系結構,我們在IPFS上檢索內容的方式也是革命性的。我們不是透過內容的位置即IP地址來標識內容,而是透過對內容本身進行雜湊建立的唯一識別符號來標識內容。這稱為內容定址。出於以下幾個原因,這非常有用:

  • 資料永續性。 如果許多同行擁有您想要的內容,您將從最接近的同行那裡獲得。即使內容的原始上載者已離線,但由於內容已定址,因此您很有可能仍會獲得它。與今天的web相比,如果伺服器宕機,內容也隨之宕機,這是一個很大的改進。

  • 內建安全性。由於內容識別符號(CID)是透過對內容本身進行雜湊處理而建立的,因此您始終可以確保完全獲得所需的內容。無法欺騙系統,因為如果您修改內容,其識別符號將隨之改變。

準備入門

在開始之前,我想先解決一些問題。IPFS客戶端有兩種實現,一種在JavaScript,另一種在Go。在這裡,JavaScript似乎是最好的選擇,但是由於它處於比Go客戶端更早的開發狀態,因此這不是最佳選擇。我們將使用Go客戶端,並透過其API與Node連線。

先決條件:

1. Node.js(最好是更高版本之一)和npm

2. go-ipfs客戶端

3. postman或curl,用於向我們的REST API發出請求

首先,我們的節點必須以線上模式執行,因此開啟一個終端並執行ipfs daemon。您應該會看到以下內容:

在第19行,您可以看到API伺服器正在偵聽埠5001。這是我們需要連線的埠。

其次,建立一個新的專案目錄並執行npm install ipfs-http-client。這是我們需要連線到正在執行的IPFS節點的軟體包。

接下來,讓我們建立js檔案,在該檔案中我們將連線到節點:

在第3行上,我們實際上連線到守護程式API伺服器。現在,我們可以開始在ipfs物件上執行命令以與網路互動。

舉例來說,讓我們編寫一個向IPFS新增一些文字的函式:

在第1行上,我們建立一個要新增到IPFS的物件。路徑是我們希望在IPFS上呼叫檔案的路徑(可以包含目錄),內容是我們要新增的檔案的Buffer(在這種情況下,只是純文字)。接下來,我們使用ipfs.add()將檔案新增到ipfs中,這將返回包含所有已新增檔案的陣列。因為我們只新增了一個,所以console.log()的結果將是:

如果繼續進行,您會發現雜湊欄位每次都會完全相同,因為您新增了與我相同的內容。另外請注意,路徑名不會影響內容識別符號。如果現在要檢索內容,則有兩種可能性:

  • 使用您的本地閘道器伺服器:http//localhost:8080/ipfs/QmWfVY9y3xjsixTgbd9AorQxH7VtMpzfx2HaWtsoUYecaX

  • 閘道器伺服器由您的IPFS守護程序啟動。使用公共閘道器:https://gateway.ipfs.io/ipfs/QmWfVY9y3xjsixTgbd9AorQxH7VtMpzfx2HaWtsoUYecaX

所有這些都已經很酷了,但讓我們看看如何在應用程式中使用它。為了演示更多功能,讓我們使用Express建立一個小的REST API。

構建應用程式

不要忘記執行npm install express。

讓我們從一些樣板程式碼開始:

繼續執行它,並用curl http://localhost:3000 其進行測試。您應該看到 Welcome to my IPFS app。

現在新增一條POST路線:

現在,我們可以與postman一起測試這條路線。建立一個新的POST請求到http:// localhost:3000 / upload。 您可以選擇放入正文中的內容,但必須為JSON:

如果一切順利,您應該已經得到響應,並且從Express應用程式獲得了一些終端輸出:{path:'postman request',content:'postman said whassup'}。由於我們使用JSON中介軟體,因此req.body被解析為JS物件,這已經是我們需要向IPFS新增內容的格式。讓我們透過修改和呼叫addFile函式擴充套件功能,然後透過公共閘道器返回指向已新增檔案的連結:

在第8行的addFile()中,我們將req.body資料作為引數並將其新增到IPFS。然後,我們返回fileHash,以便可以將其包含在作為響應傳送回的連結中。如果現在我們對郵遞員發出另一個POST請求:

我們返回一個連結以在公共閘道器上檢視我們的檔案! 請注意,由於公共閘道器的速度可能很慢,因此實際上可能需要一段時間才能載入此連結。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;