egg入门的一次项目

小咪咪 2024-04-18 21:57 103阅读 0赞

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

背景

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmd3ZWlzY3Nkbg_size_16_color_FFFFFF_t_70

Egg.js是什么?

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

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

脚手架

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

  1. mkdir egg-project && cd egg-project
  2. npm init egg type=simple
  3. npm i
  4. npm run dev

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

目录结构

  1. egg-project
  2. ├── package.json
  3. ├── app.js (可选)
  4. ├── agent.js (可选)
  5. ├── app
  6. | ├── router.js
  7. ├── controller
  8. | └── home.js
  9. ├── service (可选)
  10. | └── user.js
  11. ├── middleware (可选)
  12. | └── response_time.js
  13. ├── schedule (可选)
  14. | └── my_task.js
  15. ├── public (可选)
  16. | └── reset.css
  17. ├── view (可选)
  18. | └── home.tpl
  19. └── extend (可选)
  20. ├── helper.js (可选)
  21. ├── request.js (可选)
  22. ├── response.js (可选)
  23. ├── context.js (可选)
  24. ├── application.js (可选)
  25. └── agent.js (可选)
  26. ├── config
  27. | ├── plugin.js
  28. | ├── config.default.js
  29. ├── config.prod.js
  30. | ├── config.test.js (可选)
  31. | ├── config.local.js (可选)
  32. | └── config.unittest.js (可选)
  33. └── test
  34. ├── middleware
  35. | └── response_time.test.js
  36. └── controller
  37. └── 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.jsagent.js 用于自定义启动时的初始化工作,可选。
  • app/public/** 用于放置静态资源,可选。
  • app/schedule/** 用于定时任务,可选。
  • app/view/** 用于放置模板文件,可选。
  • app/model/** 用于放置领域模型,可选。

路由(Router)

先在app/router.js定义路由

  1. 'use strict';
  2. /**
  3. * @param {Egg.Application} app - egg application
  4. */
  5. module.exports = app => {
  6. const { router, controller } = app;
  7. router.get('/home/:id', controller.home.index);
  8. };

然后在app/controller/home.js

  1. 'use strict';
  2. const Controller = require('egg').Controller;
  3. class HomeController extends Controller {
  4. async index() {
  5. const { ctx } = this;
  6. ctx.body = {
  7. code: 0,
  8. data: `hello world-${id}`,
  9. message: 'success',
  10. };
  11. }
  12. }
  13. module.exports = HomeController;

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

20190912171403279.png

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

app/router.js定义路由

  1. 'use strict';
  2. /**
  3. * @param {Egg.Application} app - egg application
  4. */
  5. module.exports = app => {
  6. const { router, controller } = app;
  7. router.get('/home/:id', controller.home.index);
  8. router.post('/base', controller.base.list);
  9. };

app/controller/base.js

  1. 'use strict';
  2. const Controller = require('egg').Controller;
  3. class BaseController extends Controller {
  4. async list() {
  5. const { ctx } = this;
  6. console.log('req', ctx.request.body);
  7. ctx.body = {
  8. code: 0,
  9. data: ctx.request.body,
  10. message: 'success',
  11. };
  12. }
  13. }
  14. module.exports = BaseController;

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmd3ZWlzY3Nkbg_size_16_color_FFFFFF_t_70 1

先更新到这里

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

发表评论

表情:
评论列表 (有 0 条评论,103人围观)

还没有评论,来说两句吧...

相关阅读

    相关 egg项目

    篇博客记录我的一次egg.js的入门项目。 **背景** 前端要对接一个java重构的项目,发现java重构的项目跟之前python做的项目接口返回数据结构基本不...