初始化项目后,即可使用
-
配置路由 router.get('/', controller.home.index); router.get('/list', controller.home.list); router.post('/add', controller.home.add);
-
写控制器 async index() { const { ctx } = this; ctx.body = 'hi, egg'; } 这里的意思是,如果访问 / 路径,就使用controller.home.index的控制器方法处理 处理结果就是,首页渲染 hi, egg
-
写服务部分 服务部分是对控制器的功能扩充,放在 service 目录下 控制器仅仅做简单的逻辑处理 如果需要复杂的数据库操作运算,都交由服务部分处理 路由请求,将参数传递给控制器,控制器将接收到的实参,再传递给服务部分
如果前端实际请求是 /list/123/456 那么路由是router.get('/list/:cat/:id', controller.home.list); 那么控制器通过 ctx.params 接收传递过去的参数
如果前端实际请求是 /list?aid=123&name=zhangsan 那么路由是router.get('/list', controller.home.list); 那么控制器通过 ctx.query 接收传递过去的参数
- 如果是数据发送post请求,那么就通过 ctx.request.body 前端发送form表单数据到后端,后端接收数据 router.post('/add', controller.home.add); this.$AXIOS.post(this.EGG_API + "/add", { admin: this.username, pass: this.password })
async add(){ const {ctx} = this; let {admin,pass} = ctx.request.body; //后端接收数据 let res = await ctx.service.add.add(admin,pass); //后端把接收的实参,传给service模块 ctx.body={ code:200, msg:res } } 上面部分,注意前后端的参数名要一致,不然结构不出来值
service部分,通过形参接收实参,然后把结果返回给控制器,控制器再返回给前端 class AddService extends Service { async add(a,p) { console.log("p:"+p) return { adm:"实际的用户名是:"+a, pas:"实际的密码是:"+(Number(p)+100) }; } } 上面是服务部分,通过a,p形参,接收到实际参数,运算后返回给HomeController,再返回给前端 这样一个api接口就算完成了