egg.jsでsequelize Mysql 2レコード2を使用

15235 ワード

egg.jsでsequelize Mysql 2レコード2を使用
  • 記述コード
  • 前の文章に続く
    コードの作成
    ビジネスロジックを実現することができます.まずapp/modelディレクトリの下でuserというmodelを作成します.
    'use strict';
    
    module.exports = app => {
      const { STRING, INTEGER, DATE } = app.Sequelize;
    
      const User = app.model.define('user', {
        id: { type: INTEGER, primaryKey: true, autoIncrement: true },
        name: STRING(30),
        age: INTEGER,
        created_at: DATE,
        updated_at: DATE,
      });
    
      return User;
    };
    

    コントロール層
    // app/controller/users.js
    const Controller = require('egg').Controller;
    
    function toInt(str) {
      if (typeof str === 'number') return str;
      if (!str) return str;
      return parseInt(str, 10) || 0;
    }
    
    class UserController extends Controller {
      async index() {
        const ctx = this.ctx;
        const query = { limit: toInt(ctx.query.limit), offset: toInt(ctx.query.offset) };
        ctx.body = await ctx.model.User.findAll(query);
      }
    
      async show() {
        const ctx = this.ctx;
        ctx.body = await ctx.model.User.findById(toInt(ctx.params.id));
      }
    
      async create() {
        const ctx = this.ctx;
        const { name, age } = ctx.request.body;
        const user = await ctx.model.User.create({ name, age });
        ctx.status = 201;
        ctx.body = user;
      }
    
      async update() {
        const ctx = this.ctx;
        const id = toInt(ctx.params.id);
        const user = await ctx.model.User.findById(id);
        if (!user) {
          ctx.status = 404;
          return;
        }
    
        const { name, age } = ctx.request.body;
        await user.update({ name, age });
        ctx.body = user;
      }
    
      async destroy() {
        const ctx = this.ctx;
        const id = toInt(ctx.params.id);
        const user = await ctx.model.User.findById(id);
        if (!user) {
          ctx.status = 404;
          return;
        }
    
        await user.destroy();
        ctx.status = 200;
      }
    }
    
    module.exports = UserController;
    

    router層restful APIの具体的なアクセス方法は公式サイトを見ることができます
    // app/router.js
    module.exports = app => {
      const { router, controller } = app;
      router.resources('users', '/users', controller.users);
    };