成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何使用Feathers.js和SQLite構建REST API

譯文 精選
開發 開發工具
本文將教你如何使用像 Arctype、Feather.js 和 SQLite 這樣的工具來構建 REST API 和一個可用于生產的應用程序原型。

譯者 | 盧鑫旺

審校 | 孫淑娟

你是否正在尋找一種方法來構建具有身份驗證、數據庫設置和授權等特性的Web應用程序,而無需編寫大量的代碼和配置?你是否想在幾天內創建一個可用于生產的應用程序?信不信由你,這是可能的!本教程將向你展示如何使用Feathers.js在幾分鐘內創建一個REST API。我們將學習如何使用Feathers.js實現一個示例API,并分享一些想法和注意事項。

1.什么是Feathers.js?

Feathers.js是一個輕量級的Web框架,用于使用JavaScript或TypeScript開發實時應用和REST API。

Feathers.js可以與任何后端技術進行交互,支持十多個數據庫,還可以與任何前端技術一起工作,比如React、VueJS、Angular和React Native。

Feathers.js以其易用性、交付速度和豐富文檔而聞名。對于Feathers,你只需要運行一個簡單的命令就可以添加一個特性。

2.知識預備

本教程是一個實際操作的演示。首先,你要做如下準備:

  • 安裝Node.js
  • 安裝Arctype
  • 安裝Insomnia
  • 熟悉Node.js和Express.js

3.我們將要構建什么

你將創建一個電影租賃應用程序來演示Feathers.js和Arctype數據庫可視化工具的功能。管理員將在這個程序中生成電影,通過身份驗證的用戶將能夠租用它們。你將學習使用Sequelize關聯feather .js中的表,限制訪問特定的路由,并將數據庫鏈接到Arctype。

4.準備開始

首先,打開命令行界面,用下面的命令為本教程創建一個文件夾:

npm install @feathersjs/feathers --save

等待安裝完成,并使用下面的命令確認是否安裝成功:

feathers -V

如果安裝過程一切順利,你將在控制臺上看到打印出來的版本號。

5.創建一個應用

在安裝好Feather.js后,使用下面的命令為此應用程序創建一個文件夾:

Mkdir RestWithFeathers && RestWithFeathers

然后,使用下面的命令生成一個新的API應用程序:

feathers generate app

上面的命令將提示你為應用程序選擇配置。對于本教程中的演示,你的選擇應該如下面的截圖所示:

圖片

在上面的截圖中,我們做了如下的選擇:

  • 首選編程語言為Javascript
  • 指定應用程序的名稱(movie-rental)
  • 選擇src作為項目樣板文件的位置
  • 選擇npm作為包管理工具
  • 啟用用戶身份驗證
  • 選擇使用Eslint分析我們的代碼
  • 選擇用戶名和密碼身份驗證策略
  • 選擇user作為實體的名稱
  • 選擇Sequelize作為應用的ORM
  • 選擇SQLlite作為我們的數據庫
  • 指定數據庫名稱為movieDB

一旦選擇完成,該命令將生成一個類似Express.js風格的項目結構。讓我們看看通過運行上述命令生成的文件夾結構。

圖片

在本教程中,我們將看到以下內容:

  • config:包含應用程序的配置文件
  • node_modules:用于存儲運行應用程序所需的已安裝軟件包列表的文件夾
  • public:包含可以提供給客戶端的靜態文件
  • src:包含Feathers.js應用程序的服務代碼
  • src/hooks:包含應用程序的自定義鉤子
  • src/middleware:包含Express.js中間件
  • src/service:包含我們的應用程序服務
  • src/index.js:啟動應用的入口文件
  • src/app.js:配置Feathers.js應用程序
  • src/app.hook.js:包含應用到每個服務的鉤子
  • src/channels.js:設置Feathers.js事件通道
  • test:包含應用程序的測試代碼

現在使用如下命令以開發模式啟動服務:

npm run dev

以開發模式運行服務會激活熱加載和控制臺錯誤日志。此時,服務運行在3030端口,同時一個moviedb.sqlite文件會創建在項目的根目錄中。

6.創建服務

服務是實現某些方法的對象或類的實例。服務為與任何數據交互提供一致的、獨立于協議的接口。在Feathers.js中,你只需要運行一條命令,就能為創建服務做好一切準備。使用如下命令來創建一個movie應用:

feathers generate service

上面的命令將提示你為你的服務選擇配置。你的選擇應該如下面的截圖所示:

圖片

這里,你為你的movie項目表選擇了ORM、服務名、路由URL,并在movie項目路由上啟用了身份驗證。一旦這些選擇完成,該命令將在src/service文件夾中生成下面的文件夾結構。

圖片

在你的movie.hook文件中,Feathers添加了下面的代碼片段,確保在請求通過這個路由傳遞到movie service之前,必須確認用戶登錄時發送的用戶訪問令牌。

before: {  
all: []
find: [ authenticate('jwt') ]
get: [ authenticate('jwt') ],
create: [ hashPassword('password') ],
update: [ hashPassword('password'), authenticate('jwt') ],
patch: [ hashPassword('password'), authenticate('jwt') ],
remove: [ authenticate('jwt') ]
},

接著,使用如下命令創建一個租賃服務

feathers generate service

上面對movie service執行了相同的操作,但是這次生成了不同的文件夾名和文件,如下所示:

圖片

它也會在所有的路由中調用JWT authenticate('jwt')方法。此外,該命令將為你剛剛創建的服務生成相應的模型,并使用一些樣板文件,如下所示:

圖片

7.創建數據庫表

創建了服務和模型后,修改模型的屬性以獲得電影和租賃表所需的屬性。對于電影模型,將以下屬性添加到屬性中。

title: {  
type: DataTypes.STRING,
allowNull: false,
},
producer: {
type: DataTypes.STRING,
allowNull: false,
},
imageURL: {
type: DataTypes.STRING,
allowNull: false,
},
createdAt: { type: DataTypes.DATE, defaultValue: Date.now },
updatedAt: { type: DataTypes.DATE, defaultValue: Date.now },

然后,在租賃模型中,添加如下屬性:

quantity: {  
type: DataTypes.INTEGER,
allowNull: false,
},
createdAt: { type: DataTypes.DATE, defaultValue: Date.now },
updatedAt: { type: DataTypes.DATE, defaultValue: Date.now },

我們需要在用戶、電影、租賃模型中創建關聯,讓我們進入下一節。

8.數據關系

數據庫關系是使用連接語句檢索數據時在表之間形成的關聯。關系通常使用ER圖來規劃。我們的應用有一張用戶(user)表、電影(movie)表、租賃(rental)表。電影歸租賃公司所有,用戶擁有租賃公司。在每個數據庫中,維護此數據的最直接的方法是在它們之間建立關系,將表id保存為與它們相關的表中的外鍵。讓我們繼續創建三個表之間的關系。在models/user.models.js中,找到如下注釋的位置:

// Define associations here  
// See https://sequelize.org/master/manual/assocs.html

并添加下面的代碼片段

const { rentals } = models;  
users.hasMany(rentals);

在代碼片段中,你創建了一個用戶表與租賃表的一對多關系。這意味著一個用戶可以有多個租賃。

之后,我們可以添加如下代碼到models/movie.model.js文件中:

const { rentals, movie } = models;  
movie.belongsToMany(rentals, { through: 'MovieRendtals' });

在上面的代碼片段中,我們在電影表與租賃表之間創建了一個多對多關系,這意味著一個電影可以有多個租賃。在多對多關系中,創建一個連接表來跟蹤兩個表的id,在本例中為MovieRentals。最后,添加如下代碼片段到models/rentals.model.js文件中:

const { users, movie } = models;  
rentals.belongsTo(users);
rentals.belongsToMany(movie, { through: 'MovieRentals' });

現在,表之間互相有了關系。你可以在創建數據或從任何服務獲取數據時將數據加載到表中。這讓我們進入到了Feathers.js中的鉤子函數環節。

9.添加自定義鉤子

鉤子是插件化的中間件函數,可以注冊在服務方法前,服務方法后,或者方法報錯時。你可以注冊一個鉤子函數或者創建一個鉤子函數鏈來創建復雜的工作流。你可以創建一個鉤子來加載與每個表相關的數據。在你的service/rentals文件夾中,創建get-related.js文件并把如下代碼片段寫進文件中:

module.exports = function (options = {}) {  
return async (context) => {
const sequelize = context.app.get('sequelizeClient');
const { users, movie } = sequelize.models;
context.params.sequelize = {
include: [{ model: users }, { model: movie }],
raw: false,
};
return context;
};
};

在上述代碼片段中,是告訴Feathers.js當一部電影被租賃時記載用戶和電影模型的數據。現在使用如下的代碼片段更新你的service/rentals/rental.hooks.js文件。修改before對象內部的代碼。

all: [authenticate('jwt')],  
find: [getRelated()],
get: [getRelated()],
create: [getRelated()],
update: [],
patch: [],
remove: []

10.應用測試

現在讓我們用Insomnia測試應用程序。我們從用戶路由開始。

(1)創建用戶

在/user路由下創建用戶

圖片

(2)驗證用戶

在/authentication路由驗證用戶

圖片

(3)創建一部電影

在/movie路由創建電影

圖片

(4)租賃一部電影

在/rentals路由中租賃一部電影。你將會在此路由中指定userId,movieId和quantity字段。

圖片

現在繼續測試每個路由上的其他請求方法,如GET、UPDATE和DELETE。

11.連接Arctype

將數據庫連接到Arctype,以查看應用程序中創建的表和數據。你可以通過以下步驟連接到Arctype:

(1)運行Arctyp

(2)點擊SQLite選項卡

(3)點擊Choose SQLite File按鈕

(4)導航到項目文件夾并選擇moviedb.sqlite文件

(5)測試連接并保存配置

一旦數據庫成功連接Arctype,你將會看到如下截圖所示的users表,movies表,rentals表,MovieRentals表。

圖片

此時,你的數據庫就已經成功連接上了Arctype。你可以點擊每一張表去看存儲的數據。

12.結語

在本教程中,通過構建一個演示應用程序,你已經了解了Feathers.js。你已經學習了如何設置feather .js應用程序、創建服務、實現身份驗證/授權、創建自定義鉤子以及連接到Arctype。既然你已經掌握了這些知識,那么你打算如何在下一個項目中使用Feathers.js ?你甚至可以通過fork或克隆GitHub庫來為這個項目添加一些額外的特性。

原文鏈接:https://dzone.com/articles/building-a-rest-api-with-feathersjs-and-sqlite

譯者介紹

盧鑫旺,51CTO社區編輯,半路出家的九零后程序員。做過前端頁面,寫過業務接口,搞過爬蟲,研究過JS,有幸接觸Golang,參與微服務架構轉型。目前主寫Java,負責公司可定制化低代碼平臺的數據引擎層設計開發工作。

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2023-04-18 15:18:10

2022-01-07 15:11:27

項目Go 框架

2020-07-07 07:00:00

Spring WebFREST APIReactive AP

2023-01-10 14:11:26

2012-08-28 11:12:37

IBMdW

2022-05-09 17:33:23

PWA漸進式Web應用程序離線優先

2022-02-09 14:36:25

GoMongoDBFiber

2023-09-21 11:20:46

2021-11-22 09:00:00

后端開發CMS

2023-05-11 12:40:00

Spring控制器HTTP

2022-02-10 23:38:23

API架構設計

2023-12-06 07:13:16

RESTAPI客戶端

2021-12-02 16:20:18

RabbitMQAPIRest

2023-10-30 18:59:38

REST API開發

2022-08-22 07:26:32

Node.js微服務架構

2013-03-28 14:54:36

2022-03-29 09:00:00

Angular框架REST API

2022-09-12 15:58:50

node.js微服務Web

2024-12-23 08:00:00

2022-10-08 00:53:12

HTTP物聯網應用程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区三区四区视频 | 久久久久久久国产 | 久草视频在线播放 | 亚洲 欧美 日韩在线 | 国产精品久久久久久久久久三级 | 亚洲视频在线观看免费 | 午夜亚洲 | 97国产精品 | 色av一区二区三区 | 一区二区三区回区在观看免费视频 | 欧美午夜一区二区三区免费大片 | 日韩一区二区三区在线视频 | 亚洲国产中文字幕 | 色综合久久天天综合网 | 久久99精品国产自在现线小黄鸭 | 欧美一二精品 | 久久婷婷色 | 欧美三级电影在线播放 | 毛片在线看片 | 国产中文| 国产小视频在线观看 | 男人的天堂亚洲 | 一区二区三区四区国产 | 久久久高清 | www.99热.com | 成人3d动漫一区二区三区91 | 亚洲精品9999| 一区二区视频在线 | 欧美日韩久 | 91久久久久| 污污免费网站 | 一区二区在线视频 | 亚洲国产精品精华素 | 99热精品在线 | 亚洲精品一区二区二区 | 成人一区二区三区 | 在线看免费的a | 成人精品国产 | h网站在线观看 | 亚洲综合小视频 | 国产亚洲成av人片在线观看桃 |