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
还没有评论,来说两句吧...