小程序模板網(wǎng)

小程序后端 egg 框架開(kāi)發(fā)記錄

發(fā)布時(shí)間:2020-05-22 09:45 所屬欄目:小程序開(kāi)發(fā)教程

內(nèi)置對(duì)象

Request & Response

可以在 Context 的實(shí)例上獲取到當(dāng)前請(qǐng)求的 Request( ctx.request ) 和 Response( ctx.response ) 實(shí)例。

  • ctx.response.body= 和 ctx.body= 是等價(jià)的。
  • [!] 需要注意的是,獲取 POST 的 body 應(yīng)該使用 ctx.request.body ,而不是 ctx.body

Controller

框架提供了一個(gè) Controller 基類,并推薦所有的 Controller 都繼承于該基類實(shí)現(xiàn)。這個(gè) Controller 基類有下列屬性:

  • ctx - 當(dāng)前請(qǐng)求的 Context 實(shí)例。
  • app - 應(yīng)用的 Application 實(shí)例。
  • config - 應(yīng)用的 配置 。
  • service - 應(yīng)用所有的 service 。
  • logger - 為當(dāng)前 controller 封裝的 logger 對(duì)象。

Service

框架提供了一個(gè) Service 基類,并推薦所有的 Service 都繼承于該基類實(shí)現(xiàn)。 Service 基類的屬性和 Controller 基類屬性一致,訪問(wèn)方式也類似

中間件

編寫(xiě)中間件

一個(gè)中間件是一個(gè)放置在 app/middleware 目錄下的單獨(dú)文件,它需要 exports 一個(gè)普通的 function,接受兩個(gè)參數(shù):

  • options: 中間件的配置項(xiàng),框架會(huì)將 app.config[${middlewareName}] 傳遞進(jìn)來(lái)。
  • app: 當(dāng)前應(yīng)用 Application 的實(shí)例。
// app/middleware/error_handler.js
module.exports = () => {
  return async function errorHandler(ctx, next) {
    try {
      await next();
    } catch (err) {
      // 所有的異常都在 app 上觸發(fā)一個(gè) error 事件,框架會(huì)記錄一條錯(cuò)誤日志
      ctx.app.emit('error', err, ctx);

      const status = err.status || 500;
      // 生產(chǎn)環(huán)境時(shí) 500 錯(cuò)誤的詳細(xì)錯(cuò)誤內(nèi)容不返回給客戶端,因?yàn)榭赡馨舾行畔?
      const error = status === 500 && ctx.app.config.env === 'prod'
        ? 'Internal Server Error'
        : err.message;
      // 從 error 對(duì)象上讀出各個(gè)屬性,設(shè)置到響應(yīng)中

      if (status === 422) {
        ctx.body = { 
          code: ctx.ERROR_CODE, 
          data: error,
          msg: '參數(shù)錯(cuò)誤'+status
         };
      }
      if (status === 500) {
        ctx.body = { 
          code: 500, 
          data: '',
          msg: '服務(wù)端錯(cuò)誤-----'+error
         };
      }
      ctx.status = 200;
    }
  };
};復(fù)制代碼

使用

在應(yīng)用中使用中間件

在應(yīng)用中,我們可以完全通過(guò)配置來(lái)加載自定義的中間件,并決定它們的順序。

如果我們需要加載上面的 gzip 中間件,在 config.default.js 中加入下面的配置就完成了中間件的開(kāi)啟和配置:

// 加載 errorHandler 中間件
  config.middleware = ['errorHandler']復(fù)制代碼


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開(kāi)源 碼云倉(cāng)庫(kù):starfork
本文地址:http://u-renovate.com/wxmini/doc/course/25253.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢