koa2搭建注册用户后台(二)—— 模型应用、使用,控制器,路由,解决跨域

61 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

koa2+sequelize+mysql2搭建后台

本文章是根据以下链接进行二次开发,案例有所改变,将最主要的提取了出来,若需更详细的可看以下链接的文章

www.jianshu.com/p/3e35db2c8…

4.模型应用、使用

在项目中modules目录下创建users.js文件,为用户表,该文件为用户的实例。(伏笔在这里出现了,如果两非必填项没赋值,将会报错)

// 引入mysql的配置文件
const db = require('../config/db');

// 引入sequelize对象
const Sequelize = db.sequelize;

// 引入数据表模型
const Users = Sequelize.import('../schema/users');
Users.sync({
  force: false
}); //自动创建表

class UsersModel {
  /**
   * 创建用户模型
   * @param data
   * @returns {Promise<*>}
   */
  static async createUsers(data) {
    return await Users.create({
      loginName: data.loginName, //登录名
      pwd: data.pwd, //密码
      email: data.email, //email
      avatarUrl: '',//这两个非必填项一定要写不然
      headline: ''//就会报错。
    });
  }

  /**
   * 查询用户的详情
   * @param id 用户ID
   * @returns {Promise<Model>}
   */
  static async getUsersDetail(id) {
    return await Users.findOne({
      where: {
        id
      }
    });
  }
}

module.exports = UsersModel;

5.controller 控制器 控制器的主要作用为功能的处理,项目中controller目录下创建users.js,代码如下:

const UsersModel = require("../modules/users");

class usersController {
  /**
   * 创建用户
   * @param ctx
   * @returns {Promise.<void>}
   */
  static async create(ctx) {
    //接收客服端
    let req = ctx.request.body;
    if (req.loginName && req.pwd && req.email) {
      try {
        //创建用户模型
        const ret = await UsersModel.createUsers(req);
        //使用刚刚创建的用户ID查询文章详情,且返回用户详情信息
        const data = await UsersModel.getUsersDetail(ret.id);

        ctx.response.status = 200;
        ctx.body = {
          code: 200,
          msg: '创建用户成功',
          data
        }
      } catch (err) {
        ctx.response.status = 412;
        ctx.body = {
          code: 412,
          msg: '创建用户失败',
          data: err
        }
      }
    } else {
      ctx.response.status = 416;
      ctx.body = {
        code: 200,
        msg: '参数不齐全'
      }
    }
  }

  /**
   * 获取用户详情
   * @param ctx
   * @returns {Promise.<void>}
   */
  static async detail(ctx) {
    let id = ctx.params.id;
    if (id) {
      try {
        // 查询用户详情模型
        let data = await UsersModel.getUsersDetail(id);
        ctx.response.status = 200;
        ctx.body = {
          code: 200,
          msg: '查询成功',
          data
        }
      } catch (err) {
        ctx.response.status = 412;
        ctx.body = {
          code: 412,
          msg: '查询失败',
          data
        }
      }
    } else {
      ctx.response.status = 416;
      ctx.body = {
        code: 416,
        msg: '用户ID必须传'
      }
    }
  }
}

module.exports = usersController;

6.路由

路由,也可以简单理解为路径,主要是作为请求的url,请求的路径来处理一些请求,返回数据。(其实就是后台接口)

一般情况下,基于node的项目,路由都是在一个叫做routes的目录下面。

const Router = require('koa-router');
const UsersController = require('../controllers/users');

const router = new Router({
  prefix: '/api/v1'
});
/**
 * 用户接口
 */
//创建用户
router.post('/users/create', UsersController.create);

//获取用户详情
router.get('/users/:id', UsersController.detail);

module.exports = router

7.解决跨域

npm install koa-cors --save

然后在根目录下的app.js加入koa-cors的引用:

const cors = require('koa-cors')
app.use(cors()) //使用cors

重启服务就能测试接口了。

troller.create);

//获取用户详情 router.get('/users/:id', UsersController.detail);

module.exports = router


**7.解决跨域**

```javascript
npm install koa-cors --save

然后在根目录下的app.js加入koa-cors的引用:

const cors = require('koa-cors')
app.use(cors()) //使用cors

重启服务就能测试接口了。