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表已经建好了 ,
浅试一下吧,
-
给controller注入service实例
-
给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>;
...
-
在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;
}
}
-
在controller中写个接口,
async createUser(data) {
const user = await this.userService.createRandomUsers();
return { success: true, message: 'OK', data: user };
}
-
调用一下这个接口 http://localhost:7001/api/createUser
-
打开Navicat 看一下,(假装有截图) , 嗯很好已经添加上了
-
再写一个查询所有数据的方法 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,
};
}
-
很好全部都查出来了 (截图)
总结:到今天我们可以说是掌握了midway最最基本的使用方法和原理 ,接下来就看一个优秀的基于midwayJs开发的项目:cool.js