egg.js基礎入門


之前一直使用koa, 剛剛接觸egg, 做了一些入門的筆記

准備工作 

1  首先安裝腳手架,,並創建項目。

1 $ npm i egg-init -g
2 $ egg-init egg-demo --type=simple
3 $ cd egg-demo
4 $ npm i   // 也可以使用yarn

2 . 啟動項目

1 $ npm run dev

瀏覽器打開http://127.0.0.1:7001/即可進入默認的首頁。

 

3 . 項目目錄

     1 ) /app   ----------- 主要工作目錄

      /controller   ------------- 控制器,比如獲取service的數據和渲染view的模板

      /extend    ------------- 方法擴展,比如封裝時間格式化方法

      /middleware  ----------- 中間件,比如登錄權限設置

      /public   ------------ 靜態文件目錄,比如css,  js, image

      /service        ------------- 服務,操作數據庫增刪改查等

      /view     ------------- 模板目錄,存放模板文件,如ejs, jade, pug, nunjucks等

      -router.js   ------------- 路由文件

     2 ) /config ---------- 主要配置目錄

        -config.default.js  ------------ 配置文件, 

      -plugin.js      ----------- 配置插件, 如開啟模板引擎

 

 

開發階段

1 . 新建路由

 # app/router.js

1 module.exports = app => {
2   const { router, controller } = app;
3   router.get('/', controller.home.index);  // 腳手架默認路由
4   router.get('/user', controller.user.index)   // 新建路由
5 };

訪問路徑 http://127.0.0.1:7001/user時會指向controller.user.index控制器

controller是app應用的一個屬性對象,直接指向controller目錄,上面的controller.user.index表示,指向app/controller/user.js的index方法

2 . 新建控制器

  # app/controller/user.js

 1 /* egg內置控制器 */
 2 const Controller = require('egg').Controller;
 3 
 4 /*聲明控制器類,並繼承與Controller */
 5 class UserController extends Controller {
 6   /*聲明異步方法*/
 7   async index() {
 8     /*ctx與koa中的一樣,表示整個應用的上下文環境*/
 9     const ctx = this.ctx;
10     ctx.body = '用戶列表'
11   }
12 }
13 
14 module.exports = UserController;

3 . 新建服務

  # app/service/user.js

 1 const Service = require('egg').Service;
 2 
 3 class UserService extends Service {
 4   async findAll() {
 5     /*這里暫時未從數據庫獲取數據,而是使用了靜態數據填充*/
 6     const users = [
 7       {id: 1, name: '蘭陵王'},
 8       {id: 2, name: '程咬金'},
 9       {id: 3, name: '諸葛亮'},
10     ]
11     return users;
12   }
13 }
14 
15 module.exports = UserService;

 

5. 修改控制器(獲取service中的數據, 並渲染到view的模板中)

  # app/controller/user.js

 1 const Controller = require('egg').Controller;
 2 
 3 class UserController extends Controller {
 4   async index() {
 5     const ctx = this.ctx;
 6     // ctx.body = '用戶列表'
 7     const title = '用戶列表';
 8     const users = await ctx.service.user.findAll();
 9     await ctx.render('user/index.ejs', {users: users, title})
10   }
11 }
12 
13 module.exports = UserController;

這里使用async..await作為異步獲取,可以參考ES6教程,意思是users獲取成功了,才會執行下一步。

使用ctx.render()渲染ejs模板, 並帶有參數傳遞。

 

4 . 新建模板

  # app/view/user/index.ejs

 1 <!doctype html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport"
 6           content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 8     <title>Document</title>
 9 </head>
10 <body>
11 <h2><%= title %></h2>
12 <ul>
13     <% users.forEach(function (item) { %>
14         <li><%= item.name %></li>
15     <% }) %>
16 </ul>
17 </body>
18 </html>

此時重啟服務訪問 http://127.0.0.1:7001/user會報錯,原因是還沒配置模板引擎。

5 . 安裝並配置模板引擎

1 $ yarn add egg-view-ejs
2 $ yarn add egg-view

# config/plugin.js

 1 module.exports = {
 2   // had enabled by egg
 3   static: {
 4     enable: true,
 5   },
 6   // 開啟ejs模板插件
 7   ejs: {
 8     enable: true,
 9     package: 'egg-view-ejs',
10   }
11 };
12 
13 // 簡化形式 exports.key = value
14 // exports.ejs = {
15 //   enable: true,
16 //   package: 'egg-view-ejs'
17 // }
18 
19 // 函數形式
20 // module.exports = () => {
21 //   return {
22 //     ejs: {
23 //
24 //     }
25 //   }
26 // }

 # config/config.default.js

 1 module.exports = appInfo => {
 2   /*其他代碼*/
 3   config.view = {
 4     // 設置ejs為默認的模板引擎
 5     defaultViewEngine: '.ejs',
 6     mapping: {
 7       '.ejs': 'ejs'
 8     }
 9   };
10   /*其他代碼*/
11 }

 

最后,重啟服務器,並訪問http://127.0.0.1:7001/user

 

結束:

該入門還未連接數據庫,如mongodb, mysql

 


免責聲明!

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



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