demo

1.Egg.js控制器基类BaseController

按照类的方式编写Controller,不仅可以让我们更好的对Controller层代码进行抽象(例如将一些统一的处理抽象成一些私有方法),还可以通过自定义Controller基类的方式封装应用中常用的方法。

我们可以将一些公用的方法封装在一个BaseController中,让其他类继承这个基类。从而可以共享其中的方法。

1.app/core/base.js 将公共的方法封装在这个基类中让其他去继承

  1. //base.js
  2. 'use strict';
  3. const Controller = require('egg').Controller;
  4. class BaseController extends Controller {
  5. async getUserInfo() {
  6. return {
  7. name: "chengchao",
  8. age: 18
  9. }
  10. }
  11. async success(url){
  12. await this.ctx.render('public/success',{
  13. url
  14. })
  15. }
  16. async error(url){
  17. await this.ctx.render('public/error',{
  18. url
  19. })
  20. }
  21. }
  22. module.exports = BaseController;

2.继承

  1. //继承调用其中的方法
  2. const BaseController = require('../core/base');
  3. class UserController extends BaseController {
  4. async login() {
  5. await this.ctx.render('login')
  6. }
  7. async register(){
  8. await this.ctx.render('register')
  9. }
  10. async doLogin(){
  11. await this.success('/login')
  12. }
  13. async doRegister(){
  14. await this.error('/')
  15. }
  16. }
  17. module.exports = UserController;

3. view/pubic/success.html

  1. //3s之后自动跳转
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>Document</title>
  9. <meta http-equiv="refresh" content="3; url=<%= url %>">
  10. </head>
  11. <body>
  12. <p style="color:green">登录成功</p>
  13. <p>3s后自动自动跳转到首页<a href="/">立即跳转</a></p>
  14. </body>
  15. </html>