7日Js全栈

编程入门 行业动态 更新时间:2024-10-11 15:21:32

7日<a href=https://www.elefans.com/category/jswz/34/1771451.html style=Js全栈"/>

7日Js全栈

midway第二天

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

修改文件位置

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

链接数据库

midway本身自带一个ORM ,安装typeOrm ,就可以实现对数据库的操作
[官方说明]()

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

安装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

更多推荐

7日Js全栈

本文发布于:2024-03-07 20:06:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718794.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Js

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!