美文网首页
基于koa框架搭建指南-集成ORM

基于koa框架搭建指南-集成ORM

作者: 玩具熊 | 来源:发表于2021-07-21 13:19 被阅读0次

    说明:
    nodejs需要操作数据库时,需要接入ORM中间件时,可以根据模型控制操作数据库
    1.安装

    npm install typeorm --save
    npm install reflect-metadata --save
    //安装对应数据库的驱动
    npm install mysql --save
    

    2.目录结构

    ├── entity
    │   └── Code.ts     //数据库实体类
    ├── index.ts        //启动文件
    ├── routes
    │   ├── content.ts   //路由
    ├── services
    │   ├── code.ts      //调用-增删改查(业务逻辑)
    

    3.配置
    tsconfig.json

    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    

    4.启动 index.ts

    //引用库
    import { createConnection } from "typeorm";
    import "reflect-metadata";
    
    //定义全局变量
    declare global{
      namespace NodeJS{
        interface Global{
          typeorm
        }
      }
    }
    //使用中间件
    app.use(async (ctx, next)=>{
      if(!global.typeorm){ //判断实例是否存在,如果不存在,则初始化
        //下方替换成自己的数据库连接配置
        global.typeorm = await createConnection({
          type: "mysql",
          host: global.db_host,
          port: global.db_port,
          username: global.db_user,
          password: global.db_pwd,
          database: 'xxx',
          entities: [__dirname + "/entity/*.ts"],//遍历entity目录所有的实体类
          synchronize: false,
          logging: false
        })
      }
      await next();
    });
    

    5.新建实体类 code.ts

    import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";
    
    //对应数据库表名,默认是驼峰对应下划线 CodeRecord=>code_record
    //如果表明和类名无法应对,使用name属性和表名一致 
    //例如:@Entity({name:'mytable'}
    @Entity()
    export class CodeRecord {
    
        //自增主键
        @PrimaryGeneratedColumn()
        id: number;
    
        //普通列,数据库类型 text(长文本)需要标注
        @Column({type:"text",name:'code'})
        code: string;
    
        //普通列 数据库类型为double,实体类任然是number类型,需要标注
        @Column("double")
        views: number;
    
        //更多类型参考 https://gitee.com/hacker_xwj/typeorm/blob/master/docs/zh_CN/entities.md#%E5%85%B7%E6%9C%89%E7%94%9F%E6%88%90%E5%80%BC%E7%9A%84%E5%88%97
    
    }
    

    6.查改增删

    import {getManager} from "typeorm";
    import { CodeRecord } from "../entity/Code";
    
    //获取列表
    const getCode = async () => {
      //启动程序已经初始化数据库连接,直接调用getManager方法拉到数据库实例
      const codeRepository = getManager().getRepository(CodeRecord);
      // 查找
      const code = await codeRepository.find();
      return code;
    }
    //编辑数据
    const editCode = async (cid: string) => {
      const codeRepository = getManager().getRepository(CodeRecord);
      let codeRecord = await codeRepository.findOne(cid);
      codeRecord.code = "hello,my friend";
      let r = await codeRepository.save(codeRecord);
      return r;
    }
    //添加数据
    const addCode = async () =>{
      const codeRepository = getManager().getRepository(CodeRecord);
      let codeRecord = new CodeRecord();
      codeRecord.code = "new Record"
      let r = await codeRepository.save(codeRecord)
      return r;
    }
    //删除数据
    const removeCode = async (cid: string) =>{
      const codeRepository = getManager().getRepository(CodeRecord);
      let codeRecord = await codeRepository.findOne(cid);
      let r = await codeRepository.remove(codeRecord)
      return r;
    }
    
    module.exports = { getCode,editCode,addCode,removeCode }
    

    相关文章

      网友评论

          本文标题:基于koa框架搭建指南-集成ORM

          本文链接:https://www.haomeiwen.com/subject/shljmltx.html