demo
1.Egg.js控制器基类BaseController
按照类的方式编写Controller,不仅可以让我们更好的对Controller层代码进行抽象(例如将一些统一的处理抽象成一些私有方法),还可以通过自定义Controller基类的方式封装应用中常用的方法。
我们可以将一些公用的方法封装在一个BaseController中,让其他类继承这个基类。从而可以共享其中的方法。
1.app/core/base.js
将公共的方法封装在这个基类中让其他去继承
//base.js
'use strict';
const Controller = require('egg').Controller;
class BaseController extends Controller {
async getUserInfo() {
return {
name: "chengchao",
age: 18
}
}
async success(url){
await this.ctx.render('public/success',{
url
})
}
async error(url){
await this.ctx.render('public/error',{
url
})
}
}
module.exports = BaseController;
2.继承
//继承调用其中的方法
const BaseController = require('../core/base');
class UserController extends BaseController {
async login() {
await this.ctx.render('login')
}
async register(){
await this.ctx.render('register')
}
async doLogin(){
await this.success('/login')
}
async doRegister(){
await this.error('/')
}
}
module.exports = UserController;
3. view/pubic/success.html
//3s之后自动跳转
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<meta http-equiv="refresh" content="3; url=<%= url %>">
</head>
<body>
<p style="color:green">登录成功</p>
<p>3s后自动自动跳转到首页<a href="/">立即跳转</a></p>
</body>
</html>