Node+TS+Koa+vue 商城全栈(九)引入 koa-bodyparser 并 实现添加分类

1.安装模块

yarn add koa-bodyparser
yarn add @types/koa-bodyparser -D

2.入口文件引入

app/index.ts

// import Koa from 'koa'; // 错误的写法
// import Koa = require('koa');
import * as Koa from 'koa';
import { useControllers } from 'koa-controllers';
import * as KoaBodyParser from 'koa-bodyparser';
import db from './models';

let app = new Koa();

// 中间件
app.use(async (ctx: Koa.Context, next) => {
  // 把db对象等其他一些数据挂在到当前的state下面
  ctx.state.db = db;

  await next();
});

app.use(KoaBodyParser());

useControllers(app, __dirname + '/controllers/**/*.controller.js', {
  multipart: {
    dest: './uploads'
  }
})

app.listen(8000);

3.添加分类

app/controllers/admin/category.controller.ts

/**
 * 分类 控制器
 */
import { Controller, Get, Ctx, Post } from 'koa-controllers';
import { Context } from 'koa';
import { Model } from 'sequelize';

@Controller
export class AdminCategoryController {

  /**
   * 获取分类信息列表
   * localhost:8000/admin/category
   */
  @Get('/admin/category')
  public async index(@Ctx ctx: Context) {
    /**
     * 方式一
     */
    // let categoryModel = <Model<any, any>>ctx.state.db['category'];
    /**
     * 方式二:类型断言
     */
    let categoryModel: Model<any, any> = ctx.state.db['category'];

    // 查询所有的分类信息
    let categories = await categoryModel.findAll();

    ctx.body = categories;
  }

  /**
   * 新增分类
   * localhost:8000/admin/category/add
   */
  @Post('/admin/category/add')
  public async add(@Ctx ctx: Context) {
    // console.log(ctx.request.body);
    let pid = (<any>ctx.request.body).pid || 0;
    let name = (<any>ctx.request.body).name || '';

    if (name == '') {
      ctx.body = {
        code: 1,
        message: '分类名称不能为空'
      }
      return;
    }

    let categoryModel: Model<any, any> = ctx.state.db['category'];
    let category = categoryModel.build({
      name,
      pid
    });

    await category.save();

    ctx.body = {
      code: 0,
      data: category
    }
  }
}

.

 

posted @ 2020-02-02 21:19  每天都要进步一点点  阅读(467)  评论(0编辑  收藏  举报