egg 官方文檔之:框架擴展(Application、Context、Request、Response、Helper的訪問方式及擴展)


Application

app 對象指的是 Koa 的全局應用對象,全局只有一個,在應用啟動時被創建。
訪問方式:

  • ctx.app
  • Controller,Middleware,Helper,Service 中都可以通過 this.app 訪問到 Application 對象,例如 this.app.config 訪問配置對象。
  • 在 app.js 中 app 對象會作為第一個參數注入到入口函數中
// app.js
module.exports = app => {
  // 使用 app 對象
};

Context

Context 指的是 Koa 的請求上下文,這是 請求級別 的對象,每次請求生成一個 Context 實例,通常我們也簡寫成 ctx。在所有的文檔中,Context 和 ctx 都是指 Koa 的上下文對象。
訪問方式

  • middleware 中 this 就是 ctx,例如 this.cookies.get('foo')。
  • controller 有兩種寫法,類的寫法通過 this.ctx,方法的寫法直接通過 ctx 入參。
  • helper,service 中的 this 指向 helper,service 對象本身,使用 this.ctx 訪問 context 對象,例如 this.ctx.cookies.get('foo')。

Request

Request 對象和 Koa 的 Request 對象相同,是 請求級別 的對象,它提供了大量請求相關的屬性和方法供使用。
訪問方式
ctx.request
ctx 上的很多屬性和方法都被代理到 request 對象上,對於這些屬性和方法使用 ctx 和使用 request 去訪問它們是等價的,例如 ctx.url === ctx.request.url。
Koa 內置的代理 request 的屬性和方法列表:Koa - Request aliases

Response

Response 對象和 Koa 的 Response 對象相同,是 請求級別 的對象,它提供了大量響應相關的屬性和方法供使用。
訪問方式
ctx.response
ctx 上的很多屬性和方法都被代理到 response 對象上,對於這些屬性和方法使用 ctx 和使用 response 去訪問它們是等價的,例如 ctx.status = 404 和 ctx.response.status = 404 是等價的。
Koa 內置的代理 response 的屬性和方法列表:Koa Response aliases

Helper

Helper 函數用來提供一些實用的 utility 函數。
它的作用在於我們可以將一些常用的動作抽離在 helper.js 里面成為一個獨立的函數,這樣可以用 JavaScript 來寫復雜的邏輯,避免邏輯分散各處。另外還有一個好處是 Helper 這樣一個簡單的函數,可以讓我們更容易編寫測試用例。
框架內置了一些常用的 Helper 函數。我們也可以編寫自定義的 Helper 函數。
訪問方式
通過 ctx.helper 訪問到 helper 對象,例如:

// 假設在 app/router.js 中定義了 home router
app.get('home', '/', 'home.index');

// 使用 helper 計算指定 url path
ctx.helper.pathFor('home', { by: 'recent', limit: 20 })
// => /?by=recent&limit=20

按照環境進行擴展

另外,還可以根據環境進行有選擇的擴展,例如,只在 unittest 環境中提供 mockXX() 方法以便進行 mock 方便測試。

// app/extend/application.unittest.js
module.exports = {
  mockXX(k, v) {
  }
};

這個文件只會在 unittest 環境加載。
同理,對於 Application,Context,Request,Response,Helper 都可以使用這種方式針對某個環境進行擴展,更多參見運行環境


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM