7日Js全栈--day2: 尝试用midwayJs写个接口

midway第二天

今日学习目标:用midway实现一个user表的curd

修改文件位置

昨天已经搭建好了一个基础的、简单的midway的项目。
在主文件目录下边新建文件夹:models
新建models.user、models.weather
把controller文件夹 下的 user.controller \ weather.controller 文件分别移动到对应的文件夹
service 文件夹下的同理 

链接数据库

midway本身自带一个ORM ,安装typeOrm ,就可以实现对数据库的操作
[官方说明](https://midwayjs.org/docs/extensions/orm)

以下是对官方文档的一些摘要

安装typeOrm 安装mysql组件 (准确的说是链接数据库的组件,具体请百度,这里不做解释)
`npm i @midwayjs/typeorm@3 typeorm --save`
`npm i mysql2 --save`
引入组件 : 是的typeOrm是通过组件为midway实例提供能力的,就像midway通过koa实现http的功能一样
// configuration.ts
import { Configuration } from '@midwayjs/core';
import * as orm from '@midwayjs/typeorm';
import { join } from 'path';

@Configuration({
  imports: [
    // ...
    orm // 加载 typeorm 组件
  ],
  importConfigs: [
    join(__dirname, './config')
  ]
})
export class MainConfiguration {

}
配置

在src/config.defult.ts 文件下增加dataSource 配置项看官方文档 ,具体配置信息按需配置即可

 dataSource: {
    default: {
      /**
       * 单数据库实例
       */
      type: 'mysql',
      host: '127.0.0.1',
      port: 3306,
      username: 'root',
      password: '123456',
      database: midwayLearning,
      synchronize: false, // 如果第一次使用,不存在表,有同步的需求可以写 true,注意会丢数据
      logging: false,

      // 配置实体模型
      // entities: [User],

      // 或者扫描形式
      entities: ['**/entity/*.entity{.ts,.js}'],
    },
  },}

到这一步,链接mysql的部分就完成了,接下来可以依据具体的业务去实现功能

新建一个user表的 entity ,映射模型也可称之为建表

新建在models/user/user.entity.ts 文件 , 写入如下内容

import {
  Entity,
  Column,
  PrimaryColumn,
  PrimaryGeneratedColumn,
  CreateDateColumn,
  UpdateDateColumn,
} from 'typeorm';

@Entity()
export class User {
  // 定义用户实体
  
  // @PrimaryColumn()
  // id: number;
  
  // 主键字段自动生成
  @PrimaryGeneratedColumn()
  id: number;

  // 名称字段
  @Column()
  name: string;

  // 描述字段
  @Column()
  description: string;

  // 年龄字段
  @Column()
  age: string;

  // 性别字段
  @Column()
  sex: number;

  // 电话字段
  @Column()
  phone: number;

  // 创建时间戳
  @CreateDateColumn({
    type: 'timestamp',
  })
  createdDate: Date;

  // 更新时间戳
  @UpdateDateColumn({
    type: 'timestamp',
  })
  updateDate: Date;

}

写完运行,以为万事大吉了? nonoo,刚才配置的时候并没有配置要扫描这个文件的规则 要在更改一下配置项
typeOrm.dataSource.defult.entities ,加上个这


此时一个user表已经建好了 ,
浅试一下吧,

  1. 给controller注入service实例 
    
  2. 给service注入entity实体类
    
import { User } from './user.entity';
import { InjectEntityModel } from '@midwayjs/typeorm';
import { Repository } from 'typeorm';
...
@Provide()
export class UserService {
...
@InjectEntityModel(User)
  userModel: Repository<User>;
  
...
  1. 在service中 , 循环创建100条数据:
    
 async createRandomUsers(): Promise<void> {
    try {
      const COUNT = 100; // 新增记录的数量
      const NAMES = ['张三', '李四', '王五', '赵六'];
      const DESCRIPTIONS = ['程序员', '设计师', '产品经理', '测试工程师'];
      const AGES = [18, 20, 22, 24];
      const SEXES = [0, 1]; // 0 表示女性,1 表示男性

      for (let i = 0; i < COUNT; i++) {
        const user = new User();
        user.name = NAMES[Math.floor(Math.random() * NAMES.length)];
        user.description =
          DESCRIPTIONS[Math.floor(Math.random() * DESCRIPTIONS.length)];
        user.age = String(AGES[Math.floor(Math.random() * AGES.length)]);
        user.sex = SEXES[Math.floor(Math.random() * SEXES.length)];
        user.phone = Math.floor(Math.random() * 1000000000);
        //在循环中使用await效率很低,最好使用promise.all()
        await this.userModel.save(user);
      }

    } catch (err) {
      return err;
    }
  }
  1. 在controller中写个接口,
    
async createUser(data) {
    const user = await this.userService.createRandomUsers();
    return { success: true, message: 'OK', data: user };
  }
  1. 调用一下这个接口 http://localhost:7001/api/createUser
    
  2. 打开Navicat 看一下,(假装有截图) , 嗯很好已经添加上了
    
  3. 再写一个查询所有数据的方法 getUserAll 
    
// controller.ts
@Get('/getUserAll')
  async getUserAll(data) {
    const user = await this.userService.getUserAll(data);
    return { success: true, message: 'OK', data: user };
  }
  
// service.ts
async getUserAll(data: any) {
    let allUser = await this.userModel.find({});
    return {
      allUser,
    };
  }

  1. 很好全部都查出来了 (截图)
    

总结:到今天我们可以说是掌握了midway最最基本的使用方法和原理 ,接下来就看一个优秀的基于midwayJs开发的项目:cool.js

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值