如何使用 Deno 和 YugabyteDB 實現 JavaScript API 現代化

大多數開發人員都熟悉 Node.js,它在 15 年前透過 Google 的 V8 運行時引擎將 JavaScript 引入了後端。 Node 取得了巨大的成功,提供了允許高並發的非阻塞 I/O。為了改善 Node.js 中明顯的設計缺陷,其原始創建者 Ryan Dahl 於 2018 年發布了 Deno,這是一個基於 V8 和 Rust 構建的競爭運行時。

Deno 提供了許多引人注目的功能,包括原生 TypeScript 支援、內建 linting 和測試以及預設安全措施。新發布的 Deno 2.0向後相容 Node.js,提供了更高的效能。

在本部落格中,我將研究如何使用 Deno 和 YugabyteDB 建立簡單的 REST API。

我已在我的電腦上運行Deno 安裝程式並初始化了一個名為deno_yugabyte的專案。

 

Deno 的預設專案結構提供了一個 TypeScript 入口點main.ts。預設的 TypeScript 編譯器提供了快速開發的環境,無需進行耗時的配置。但是,這些抽  尼泊爾 電話號碼庫 象並不是不透明的,因此您可以透過deno.json 檔案配置工具和依賴項。

運行dev任務將自動編譯程式碼並監視檔案變更。讓我們運行此任務並開始編寫一個由YugabyteDB支援的簡單 REST 伺服器。

建構 API 伺服器

Deno 為各種 Web 框架提供整合支援。

 

在此範例中,我使用Oak作為 HTTP 中間件框架,並使用YugabyteDB Smart Driver for Node.js進行資料庫互動。沒錯,Deno 2.0 新增了對從 NPM 導入套件的支持,允許開發人員在他們的專案中包含熟悉的工具。

以下是我如何使用智慧驅動程式初始化連接池。

 

電話號碼庫

由於 Deno 的運行時接受 TypeScript 和 JavaScript,因此我們新增一個Superhero介面。這將定義我們與資料庫互動時期望的資料模型。我還導入了 QueryResult 類型以與資料庫驅動程式一起使用。

介面超級英雄{

id:號碼;
名稱:字串;
權力:字串[ ] ;
}
從“npm:@types/pg/index.d.ts”導入類型{ QueryResult } ;
現在,讓我們將資料庫與一組 REST API 結合使用。以下是我匯入 Oak 並為 CRUD 操作建立端點的方法。

const app =新應用程式( ) ;

const rootRouter =新路由器( ) ;
const apiRouter =新路由器( {
前綴:“/api/v1” ,
} ) ;
根路由器。取得(“/” ,(上下文)=> {
情境.回覆. body = “歡迎使用超級英雄 API!” ;
} ) ;
api路由器
。get ( “/superheroes” , async ( context ) => {
// 取得所有超級英雄。
const結果:QueryResult < Superhero > =等待池。詢問(
“從超級英雄中選擇*;”
);

情境.回覆.身體=結果。行;

} )
。get ( “/superheroes/:id” , async ( context ) => {
// 透過 id 取得一位超級英雄。
const { id } = 上下文。參數;
const結果:QueryResult < Superhero > =等待池。查詢<超級英雄> (
“從超級英雄中選擇 *,其中 id = $1;” ,
[ ID ]
);
情境.回覆.身體=結果。行[ 0 ] ;
} )
。post ( “/superheroes” , async ( context: Context ) => {
// 建立一個新的超級英雄。
const body =等待上下文。要求。身體( ) ;
if ( body.type === “json ” ) {
const資料:超級英雄 =等待主體。價值;
const {名稱,權力} = 資料;
const結果:QueryResult < Superhero > =等  youtube 上的 laliga 頻道擁有 1000 萬訂閱者並獲得 youtube 鑽石按鈕  待池。詢問(
「插入超級英雄(名字,權力)值($1,$2)返回*」,
[姓名、權力]
);

情境.回覆.身體=結果。行[ 0 ] ;

}別的{
情境.回覆.狀態= 400 ;
情境.回覆. body = { message: “無效的請求正文類型” } ;
}
} )
。刪除(“/超級英雄/:id” ,非同步(上下文)=> {
// 透過 id 刪除超級英雄。
const { id } = 上下文。參數;
const結果:QueryResult < Superhero > =等待池。詢問(
「從超級英雄中刪除,其中 id = $1 返回 *」,
[ ID ]
);
情境.回覆.身體=結果。行[ 0 ] ;
} ) ;
/**
* 設定中間件。
*/
應用程式. use ( rootRouter.routes ( ) ) ;
應用程式.使用( apiRouter.routes ( ) ) ;
應用程式. use ( rootRouter.allowedMethods ( ) ) ;
應用程式. use ( apiRouter. allowedMethods ( ) ) ;
/**
* 啟動伺服器。
*/

等待應用程式。監聽({端口:8000 } );

 

如前所述,Deno 包含開箱即用的安全措施,並帶有用於 台灣數據  啟用潛在不安全操作的標誌。這允許開發人員僅啟用程式所需的那些操作。

例如,我更改了deno.json中的預設開   發任務,以包含 I/O、環境和網路存取以及模組導入的權限。

「任務」:{
“dev” :“deno run –allow-read –allow-write –allow-env –allow-net –allow-import –watch main.ts”

透過使用這些標誌運行 Deno 進程,

 

我可以運行伺服器並透過智慧驅動程式與 YugabyteDB 資料庫互動。對於不需要 Yugabyte 智慧驅動程式的高階叢集拓撲和負載平衡功能的小型項目,Deno 提供了自己的 PostgreSQL 驅動程式deno-postgres。

結論
Deno 2.0 透過在 Deno 專案中引入與 Node.js 的向後相容性以及對 NPM 套件(如Yugabyte 的 Node.js 智慧驅動程式)的支持,

 

可以證明 JavaScript 發展的轉折點。

 

透過將這些功能新增至其令人印象深刻的效能基準、Web 標準 API、原生 TypeScript 支援和其他增強功能中,Deno 很可能成為建置 JavaScript 服務的開發人員的預設選擇。

想要了解有關開發由 YugabyteDB 支援的 JavaScript 應用程式的更多資訊?看看我們最近的一篇文章:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端