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 . 项目目录

《egg.js基础入门》《egg.js基础入门》《egg.js基础入门》

     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

《egg.js基础入门》

 

结束:

该入门还未连接数据库,如mongodb, mysql

 

    原文作者:浅草马甲
    原文地址: https://www.cnblogs.com/hughes5135/p/10405852.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞