egg --- > 初始化一个egg项目&&基本结构说明

Egg.js体验

  • 全局安装
// 创建项目
$ npm i egg-init -g
$ egg-init egg-example --type=simple
$ cd egg-example
$ npm i

// 启动项目
$ npm run dev
$ open localhost:7000

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Egg.js的结构

  • 路由(Router): 将请求URL和具体承担执行动作的Controller的关系对应
  • 控制器(Controller):
    • Restful: 接收用户的参数,从数据中查找内容返回给用户
    • 页面请求: 根据用户访问不同的URL,渲染不同的模板得到HTML返回给用户
    • 代理服务器: 将用户的请求转发到其他服务器上.
  • 服务(Service):
    • Service就是将复杂业务场景下用于做业务封装的一个抽象层
    • 好处:
      • 保持Controller简洁
      • 业务逻辑独立性: 用户业务PCController + MobileController
      • 逻辑和展现分离:
        • 容易编写测试用例
        • 无容器依赖对象 (body header)
  • 数据库:
    • mongoose
    • sequelize

基本使用

  • 使用egg-init生成的结构如下
  • 自己添加一个Service层
    在这里插入图片描述
  • 打开egg-example/app/router.js, 有如下代码:
module.exports = app => {
	const { router, controller } = app;
	router.get('/', controller.home.index);
}
  • 在这一层,将路由请求/ 和处理函数 controller.home.index对应起来
  • controller.home.index其实是对应Controller层.
  • 找到Controller(文件夹)下面的文件home.js,打开如下:
    在这里插入图片描述
  • 说明:
    1. 使用 const Controller = require('egg').Controller得到egg框架中的Controller基类
    2. 自定义类继承与Controller基类 class HomeController extends Controller
    3. 在里面声明了一个异步方法 async index(){...}
    4. 将自定义的类导出,module.exports = HomeController
  • 这里的index 对应路由层(Router)中的 controller.home.index

类似的加一个Service层

  • 假设是User的服务处
  1. 首先获得Service的基类 const Service = require('egg').Service
  2. 自定义子类继承基类const UserService extends Service{...}
  3. 在里面写一个方法,用于获取所有用户
async getAll(){
	return [
		{name:'marron',age:18}
	]
}
  1. 导出自己定义的类
  • 目录结构自己新建,代码保存于’/egg-example/app/service/user.js’
const Service = require('egg').Service;

class UserService extends Service{
	async getAll() {
		return [
			{ name:'marron', age: 18 }
		]
	}
}

在Controller层中使用Service层的服务

  • 1.首先从this中获取上下文 const {ctx} = this
  • 2.Service层中(继承基类Service)的方法全部挂载在ctx.service上
  • 调用如下:
'use strict';

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

class HomeController extends Controller {
    async index() {
        const { ctx } = this;
        ctx.body = await ctx.service.user.getAll()
    }
}

module.exports = HomeController;

在这里插入图片描述

发布了177 篇原创文章 · 获赞 22 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/piano9425/article/details/103350179
egg