Node.js從入門到放棄(十)

前言

這是該系列文章的最後一篇,主要介紹egg框架的基本使用

安裝

npm i egg-init -g
egg-init egg-demo --type=simple
cd egg-demo
npm i

運行

npm run dev

腳手架目錄結構

在這裏插入圖片描述


訪問首頁

在這裏插入圖片描述

靜態資源開放

腳手架生成的目錄結構中,public路徑本身沒有被開放,訪問時public還是要寫上的,如127.0.0.1:7001/public/xxx

模板引擎

安裝:npm i egg-view-ejs 

配置

//app_root/config/plugin.js
exports.ejs = {
  enable: true,
  package: 'egg-view-ejs',
};


//{app_root}/config/config.default.js
config.view = {
  mapping: {
    '.html': 'ejs',
  },
};

使用

在這裏插入圖片描述
在這裏插入圖片描述
效果圖

在這裏插入圖片描述

路由

egg 基於koa2封裝,在方法調用上採用async ,await 形式,路由上採用內置路由

demo

'use strict';

const Controller = require('egg').Controller;

class HomeController extends Controller {
//注意:這裏方法名index,與接下來使用的路由相關
  async index() {
    const { ctx } = this;
    ctx.body = 'hi, egg';
  }
}

module.exports = HomeController;

'use strict';

module.exports = app => {
  const { router, controller } = app;
  //注意:這裏controller.home.index中的index,對應控制器中的index方法
  router.get('/', controller.home.index);
};

this與ctx

  • egg 中的上下文是基於koa封裝的,不能直接用ctx.body,而是:this.ctx.body,
  • 習慣使然,可以把ctx從this單獨解構出來 const { ctx } = this

get參數獲取(this.ctx.query)

get動態路由

在這裏插入圖片描述

服務

egg 對目錄結構有嚴格限制,service文件夾用於放置相關服務。除了控制器調用服務外,服務之間也可以相互調用,方式與前者一致。

新建服務

在這裏插入圖片描述

使用服務
在這裏插入圖片描述

渲染
在這裏插入圖片描述

效果圖

在這裏插入圖片描述

擴展

egg 除了本身的一些內置功能外,還支持擴展功能。定義方式很簡單,app目錄下新建extend文件夾,支持的類型有5個,application,context,helper,request,response,文件名必須嚴格爲這五種類型的名字

使用helper 對時間格式進行擴展
在這裏插入圖片描述

使用

this.ctx.helper.format(new Date())

效果圖
2019-8-22 2:53:02 PM

中間件

使用流程:

  • app目錄下新建middleware文件夾
  • middleware文件夾下新建forbiddenIp.js
  • 書寫封禁方法
module.exports = options => {
    return async (ctx, next) => {
        if (options.ip === '127.0.0.1') {
            ctx.status = 403;
            ctx.body = "您的IP已經被封禁";
        } else {
            await next();
        }
    }
}

  • 除了可以寫匿名函數,也可以寫命名函數
module.exports = options => {
    const forbiddenIpMiddleware = async (ctx, next) => {
        if (options.ip === '127.0.0.1') {
            ctx.status = 403;
            ctx.body = "您的IP已經被封禁";
        } else {
            await next();
        }
    }

    return forbiddenIpMiddleware;
}


在config.default.js中配置

 config.middleware = ['forbiddenIp'];//forbiddenIp必須和中間件的文件名相同,而不是和方法名相同
  config.forbiddenIp={
    ip:"127.0.0.1"
  }

效果圖
在這裏插入圖片描述


在這裏插入圖片描述

發佈了468 篇原創文章 · 獲贊 827 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章