使用 Egg.js 重构用户注册功能

178 阅读2分钟

使用 Egg.js 重构用户注册功能

概述

在本教程中,我们将详细介绍如何使用 Egg.js 框架重构用户注册功能。主要内容包括配置路由、安装校验插件、添加错误处理中间件、创建用户控制器以及禁用 CSRF token 验证。通过这些步骤,我们将实现一个基础的用户注册功能,并为后续的开发打下良好的基础。

添加路由

首先,我们需要在 app/router.js 文件中添加路由配置,给路由添加前缀,并定义用户注册的路由:

module.exports = app => {
  const { router, controller } = app;
  // 添加前缀
  router.prefix('/api/v1');
  // 用户频道
  router.post('/users', controller.user.create);
};

安装和配置校验插件

我们将使用 egg-validate 插件来进行数据校验。首先进行插件安装:

npm i egg-validate --save

然后在 plugin.js 文件中添加插件配置:

module.exports.validate = {
  enable: true,
  package: 'egg-validate',
};

添加错误处理中间件

为处理错误场景,我们需要添加一个错误处理中间件。新建 app/middleware/error_handler.js 文件:

// app/middleware/error_handler.js
module.exports = () => {
  return async function errorHandler(ctx, next) {
    try {
      await next();
    } catch (err) {
      // 触发错误事件并记录错误日志
      ctx.app.emit('error', err, ctx);

      const status = err.status || 500;
      const error =
        status === 500 && ctx.app.config.env === 'prod'
          ? 'Internal Server Error'
          : err.message;

      // 设置响应内容
      ctx.body = { error };
      if (status === 422) {
        ctx.body.detail = err.errors;
      }
      ctx.status = status;
    }
  };
};

将该中间件添加到 config.default.js 配置文件中:

config.middleware = ['errorHandler'];
return {
  ...config,
  ...userConfig,
};

创建用户控制器

新建 controller/user.js 文件,并添加用户创建的控制器:

class UserController extends Controller {
  async create() {
    const { ctx } = this;

    ctx.validate({
      userName: { type: 'string' },
      email: { type: 'string' },
      password: { type: 'string' },
    });
    ctx.body = 'post user';
  }
}

关闭 CSRF Token 验证

为了简化开发过程,我们可以在 config.default.js 文件中禁用 CSRF token 验证:

config.security = {
  csrf: {
    enable: false,
  },
};

return {
  ...config,
  ...userConfig,
};

总结

在本教程中,我们配置了基本的错误处理和参数校验功能,并成功实现了用户注册功能的基础结构。下一节课将进一步讲解如何将有效的参数存入数据库。