Feathers 入門

TrentZ發表於2018-05-14

1. Feathers 介紹

feathers: 基於express的web應用程式框架。其提供了一系列的工具方法來快速建立可擴充的 REST APIs 和實時的應用程式。官方文件介紹其引入了比傳統MVC體系結構更容易理解,維護和擴充套件的應用程式體系結構。 feathers主要方法介紹

  • services

    services 是feathers應用程式的核心同時也肩負著處理資料訪問的責任。服務的方法主要是:

    1. find - 查詢所有資料(可能與查詢匹配)
    2. get - 通過其唯一識別符號獲取單個資料條目
    3. create - 建立新的資料
    4. update - 通過完全替換它來更新現有資料條目
    5. patch - 通過合併新資料來更新一個或多個資料條目
    6. remove - 刪除一個或多個現有資料條目

    services 的主要作用嗯核心作用就是對資料的處理包括簡單的增刪改查,當然如果我們想要對這些進行api介面進行完善(比如新增登入驗證呀)的時候就要用到另一個知識點啦

  • hooks

    hooks 鉤子,hooks 是可插入的中介軟體功能可以在服務方法發生反饋之前或者之後進行註冊。 一個簡單的栗子:

    app.service('messages').hooks({
      before: {
        create: async context => {
          context.data.createdAt = new Date();
    
          return context;
        }
      }
    })
    複製程式碼

    嗯我基本上主要的就是通過這些來學習feathers的當然更具體的描述我們可以去官方文件進行檢視

2. 安裝與使用

配置環境需要Node 6.0版本以上

當然我們可以通過feathers生成器快速建立應用 安裝 feathers 生成器

npm install @feathersjs/cli -g
複製程式碼

生成應用程式

feathers generate app
複製程式碼

這裡需要輸入建立應用的簡單描述,具體的描述解釋可以檢視官方文件 這裡當所有的準備工作做完以後一個基礎的應用框架就已經搭建完畢啦,接下來我們就可以直接使用了

npm start
複製程式碼

開啟localhost:3030我們就能看到建立的應用程式的歡迎介面啦。

3. 建立新的services

一個新的services也就以為著在express中的新的資料模型,比如使用者表這樣 通過生成器我們可以快速的進行建立:

feathers generate service
複製程式碼

建立完新的服務以後我們能在檔案目錄下看到models下新增了剛剛建立的資料模型表,我們只需要將表欄位進行修改新的資料表就完成了。

當然services資料夾下也會同時建立兩個js檔案,一個是hooks鉤子的註冊檔案,另一個是service服務檔案。

在hooks註冊檔案裡我們就能編寫所需要的程式碼了。比如:登入驗證

這裡的登入驗證只是hooks裡使用的,在訪問之前對所有的介面進行判斷如果token判斷失敗就會報錯。

const { authenticate } = require('@feathersjs/authentication').hooks;
module.exports = {
  before: {
    all: [ authenticate('jwt') ],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
  },

  after: {
    all: [
        content => {
            
        }
    ],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
  },

  error: {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
  }
};
複製程式碼

4. 登入驗證

登入驗證 我們也可以直接通過腳手架來生成:

feathers generate authentication
複製程式碼

這樣我們經過簡單的輸入後就能生成登入驗證的介面資訊了。

登入驗證的話預設的是email + password 進行的登入,如果需要修改的話我們需要去到 config 下的 default.json 檔案下進行修改

"local": {
      "entity": "users", 
      "usernameField": "phone", // 這裡修改成個人的表欄位就好了
      "passwordField": "password"
}
複製程式碼

在驗證的介面中我們會發現只返回單單的 token 資訊,如果我們想要返回相應的使用者資訊的話可以這樣:

app.service('authentication').hooks({
    before: {
      create: [
        authentication.hooks.authenticate(config.strategies)
      ],
      remove: [
        authentication.hooks.authenticate('jwt')
      ]
    },
    after: {
        all: [ 
            hook => { // 在這裡改寫資訊
                hook.result.user = hook.params.user; // 這裡將獲取到的 user 資訊返回給前端。
                // 需要更改欄位名的話只需要修改result後的欄位就可以裡
                return hook;
            }
        ]
    },
  });
複製程式碼

小結

說的有些亂,嗯簡單的建立應用程式基本上就完成了,實際上官方文件解釋的很清晰建議能好好看下官方文件會有更好的理解。

參考文件

Featherjs