返回

Egg框架初始化流程以及基础中间件封装与应用

后端

Egg框架初始化流程

Egg框架的初始化流程大致可以分为以下几个步骤:

  1. 创建项目
  2. 安装依赖
  3. 启动项目
  4. 配置中间件
  5. 配置路由

Egg框架基本中间件

Egg框架提供了丰富的中间件,这些中间件可以帮助我们处理各种各样的请求,比如异常处理、参数校验、参数过滤、token校验等。

异常处理中间件

异常处理中间件可以帮助我们处理请求过程中发生的异常。当请求发生异常时,异常处理中间件会捕获异常并将其转换为HTTP响应。

参数校验中间件

参数校验中间件可以帮助我们校验请求中的参数是否合法。当请求中的参数不合法时,参数校验中间件会返回错误响应。

参数过滤中间件

参数过滤中间件可以帮助我们过滤请求中的参数。当请求中的参数中包含非法字符或敏感信息时,参数过滤中间件会将其过滤掉。

token校验中间件

token校验中间件可以帮助我们校验请求中的token是否合法。当请求中的token不合法时,token校验中间件会返回错误响应。

Egg框架中间件封装与应用

异常处理中间件封装

// app/middleware/exception.js
module.exports = () => {
  return async (ctx, next) => {
    try {
      await next();
    } catch (err) {
      ctx.body = {
        code: err.code || 500,
        message: err.message,
      };
    }
  };
};

参数校验中间件封装

// app/middleware/validate.js
module.exports = () => {
  return async (ctx, next) => {
    try {
      await next();
    } catch (err) {
      if (err.errors) {
        ctx.body = {
          code: 400,
          message: err.errors[0].message,
        };
      } else {
        ctx.body = {
          code: 500,
          message: err.message,
        };
      }
    }
  };
};

参数过滤中间件封装

// app/middleware/filter.js
module.exports = () => {
  return async (ctx, next) => {
    const body = ctx.request.body;
    for (const key in body) {
      if (/[<>&"']/.test(body[key])) {
        delete body[key];
      }
    }
    await next();
  };
};

token校验中间件封装

// app/middleware/token.js
module.exports = () => {
  return async (ctx, next) => {
    const token = ctx.request.headers['authorization'];
    if (!token) {
      ctx.body = {
        code: 401,
        message: 'Unauthorized',
      };
      return;
    }
    const decoded = jwt.verify(token, config.jwt.secret);
    if (!decoded) {
      ctx.body = {
        code: 401,
        message: 'Unauthorized',
      };
      return;
    }
    ctx.state.user = decoded;
    await next();
  };
};

Egg框架路由配置

Egg框架的路由配置非常简单,我们可以通过在app/router.js文件中定义路由规则来配置路由。

// app/router.js
module.exports = app => {
  app.get('/', 'home.index');
  app.get('/users', 'user.list');
  app.post('/users', 'user.create');
  app.get('/users/:id', 'user.show');
  app.put('/users/:id', 'user.update');
  app.delete('/users/:id', 'user.destroy');
};

Egg框架中间件配置

Egg框架的中间件配置也非常简单,我们可以通过在app/config/config.default.js文件中配置中间件来应用中间件。

// app/config/config.default.js
module.exports = {
  middleware: [
    'exception',
    'validate',
    'filter',
    'token',
  ],
};

总结

本文介绍了Egg框架的初始化流程以及基本中间件的封装与应用。通过本文,读者可以了解Egg框架的基本使用以及如何封装和应用中间件。