egg入门的一次项目

本篇博客记录我的一次egg.js的入门项目。

背景

前端要对接一个java重构的项目,发现java重构的项目跟之前python做的项目接口返回数据结构基本不一样,如果直接前端重新对接,那么改动肯定非常大,在不动前端代码的前提下,可以起一个node服务作为一个中台角色。如下图所示:

Egg.js是什么?

eggjs 是阿里开源的企业级 Node.js 框架,专注于企业级框架和应用而生,团队架构师和技术负责人可以基于 egg 孕育出适合自己团队的上层业务框架,帮助开发团队和开发人员降低开发和维护成本。 官网地址:https://eggjs.org

MVC 模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

脚手架

我都是参照官方文档直接撘脚手架的

mkdir egg-project && cd egg-project
npm init egg –type=simple
npm i
npm run dev

启动后直接访问http://127.0.0.1:7001就可以了

目录结构

egg-project
├── package.json
├── app.js (可选)
├── agent.js (可选)
├── app
|   ├── router.js
│   ├── controller
│   |   └── home.js
│   ├── service (可选)
│   |   └── user.js
│   ├── middleware (可选)
│   |   └── response_time.js
│   ├── schedule (可选)
│   |   └── my_task.js
│   ├── public (可选)
│   |   └── reset.css
│   ├── view (可选)
│   |   └── home.tpl
│   └── extend (可选)
│       ├── helper.js (可选)
│       ├── request.js (可选)
│       ├── response.js (可选)
│       ├── context.js (可选)
│       ├── application.js (可选)
│       └── agent.js (可选)
├── config
|   ├── plugin.js
|   ├── config.default.js
│   ├── config.prod.js
|   ├── config.test.js (可选)
|   ├── config.local.js (可选)
|   └── config.unittest.js (可选)
└── test
    ├── middleware
    |   └── response_time.test.js
    └── controller
        └── home.test.js
  • app/router.js 用于配置 URL 路由规则。
  • app/controller/** 用于解析用户的输入,处理后返回相应的结果。
  • app/service/** 用于编写业务逻辑层,可选,建议使用。
  • app/middleware/** 用于编写中间件,可选。
  • app/public/** 用于放置静态资源,可选。
  • app/extend/** 用于框架的扩展,可选。
  • config/config.{env}.js 用于编写配置文件。
  • config/plugin.js 用于配置需要加载的插件。
  • test/** 用于单元测试。
  • app.js 和 agent.js 用于自定义启动时的初始化工作,可选。
  • app/public/** 用于放置静态资源,可选。
  • app/schedule/** 用于定时任务,可选。
  • app/view/** 用于放置模板文件,可选。
  • app/model/** 用于放置领域模型,可选。

路由(Router)

先在app/router.js定义路由

'use strict';

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller } = app;
  router.get('/home/:id', controller.home.index);
};

然后在app/controller/home.js

'use strict';

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

class HomeController extends Controller {
  async index() {
    const { ctx } = this;
    ctx.body = {
      code: 0,
      data: `hello world-${id}`,
      message: 'success',
    };
  }
}

module.exports = HomeController;

在浏览器输入http://127.0.0.1:7001/home/123就可以看到返回的数据了

上面是GET方法获取参数,下面看看用POST方法获取参数

app/router.js定义路由

'use strict';

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller } = app;
  router.get('/home/:id', controller.home.index);
  router.post('/base', controller.base.list);
};

app/controller/base.js

'use strict';

const Controller = require('egg').Controller;
class BaseController extends Controller {
  async list() {
    const { ctx } = this;
    console.log('req', ctx.request.body);
    ctx.body = {
      code: 0,
      data: ctx.request.body,
      message: 'success',
    };
  }
}

module.exports = BaseController;

在postman用post调用http://127.0.0.1:7001/base,然后在body里输入json格式的数据就可以看到返回的数据了

先更新到这里

参考官方文档:https://eggjs.org

发布了115 篇原创文章 · 获赞 38 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/wangweiscsdn/article/details/100770791
今日推荐