美文网首页
TypeORM 使用之配置篇

TypeORM 使用之配置篇

作者: ithankzc | 来源:发表于2018-11-04 00:45 被阅读0次

    简介

    TypeORM 是一个能运行在 node 环境下的数据库驱动。 实际开发中主要用的是mysql, 以下讲的基本围绕着mysql的配置展开,但部分参数对于不同的数据库类型还是共用的。

    创建连接

    基本配置参数

    type: 当前要连接的数据库类型(mysql,mssql, moongo, ...)
    host: 数据库服务暴露的host
    port: 数据库服务暴露的端口
    username: 连接数据库服务的用户名
    password: 连接数据库服务的用户名
    database: 连接数据库名

    import { createConnections } from 'typeorm';
    
    const connection = await createConnection({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'test',
      password: 'test',
      database: 'test',
    });
    

    以上是官方的例子,但参数并不仅仅是这几个,翻阅文档, 会发现其实还是有几个关键的参数,了解多一点对于平时开发及生产环境都有一定的帮助

    额外参数

    • name: 设置连接名,连多个数据库的时候,需要获取连接的时候可用 getConnection('name') 的方式取得对应的数据库连接;
    • entities: 要加载并用于此连接的实体。写法类似:
     entities: [Post, Category, "entity/*.js", "modules/**/entity/*.js"]
    
    • entityPrefix: 表名前缀
    • extra: 拓展的参数值, 如设置连接池连接数量等;
    • logging

      查询(query):记录所有查询。
      错误(error):记录所有失败的查询和错误。
      模式(schema):记录模式构建过程。
      警告(warn):记录内部orm警告。
      记录(info):内部orm信息信息。
      日志(log):记录内部orm日志消息。

    如果只是简单的打印基本的数据库操作(包含错误)则设置 logging: true
    如果要打印以上全部类型,则设置 logging: 'all'
    如果只是打印其中的1~2个(如query, error),则可设置 logging: ['query', 'error']

    • logger: 可设置的类型有 advanced-console,simple-console,file, debug, 在开启 logging 的情况下,logger默认使用类型是 advanced-console, 这个模式会高亮字体和标示sql语句。
    • cache: 对查询的 sql 结果进行缓存。 支持数据库或者redis。看了下api,redis更为方便一点。
      cache 的 interface 定义如下:
        readonly cache?: boolean | {
            /**
             * Type of caching.
             *
             * - "database" means cached values will be stored in the separate table in database. This is default value.
             * - "redis" means cached values will be stored inside redis. You must provide redis connection options.
             */
            readonly type?: "database" | "redis";
            /**
             * Used to provide redis connection options.
             */
            readonly options?: any;
            /**
             * If set to true then queries (using find methods and QueryBuilder's methods) will always be cached.
             */
            readonly alwaysEnabled?: boolean;
            /**
             * Time in milliseconds in which cache will expire.
             * This can be setup per-query.
             * Default value is 1000 which is equivalent to 1 second.
             */
            readonly duration?: number;
        };
    

    如果type:'redis',则optoins的配置可见:如何配置options,
    下面会举例 cache 的基本配置

       cache: {
            type: 'redis', // 必须参数
            options: {
                host: 'localhost',
                port: 6379,
                username: '',
                password:'',
                db: 1, // 这个任君选择,0~15库都可以选
            }
        }
    

    在补充以上参数后,我们的数据库连接配置如下:

    import { createConnections } from 'typeorm';
    
    const connection = await createConnection({
      name: 'account', // 给这个连接起个名字,如果是用户库,则可以起名 account
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'test',
      password: 'test',
      database: 'test',
      entities: [__dirname + '/entity/*{.js,.ts}'], // 用此连接的实体
      logging: true, // 开启所有数据库信息打印
      logger: 'advanced-console', // 高亮字体的打印信息
      extra: {
        connectionLimit:  10, // 连接池最大连接数量, 查阅资料 建议是  core number  * 2 + n 
      },
      cache: {
        type: 'redis',
        options: {
           host: 'localhost',
           port: 6379,
           username: '',
           password:'',
           db: 1, // 这个任君选择,0~15库都可以选
         }
      }, // 如果对cache没有需求,设置`cache:false`或者干脆不填此个参数也是可以的
    });
    

    创建多个数据库连接

    假设创建用户库和作品库的连接

    import { createConnections } from 'typeorm';
    
    const connections = await createConnections([{
        name: 'account',
        type: 'mysql',
        host: 'localhost',
        port: 3306,
        username: 'root',
        password: 'admin',
        database: 'account',
        entities: [__dirname + '/entity/*{.js,.ts}'],
        logging: true, // 开启所有数据库信息打印
        logger: 'advanced-console', // 高亮字体的打印信息
        extra: {
          connectionLimit:  10, // 连接池最大连接数量, 查阅资料 建议是  core number  * 2 + n 
        },
    }, {
        name: 'work',
        type: 'mysql',
        host: 'localhost',
        port: 3306,
        username: 'root',
        password: 'root',
        database: 'work',
        entities: [__dirname + '/entity/*{.js,.ts}'],
        logging: true, // 开启所有数据库信息打印
        logger: 'advanced-console', // 高亮字体的打印信息
        extra: {
          connectionLimit:  10, // 连接池最大连接数量, 查阅资料 建议是  core number  * 2 + n 
        },
    }]);
    

    获取指定数据库连接

    假设需要获取用户及作品库的连接

    • 方式一:
    import { getConnection } from 'typeorm';
    
    const account_connection = getConnection('account');
    const work_connection = getConnection('work');
    
    • 方式二:
    import { getConnectionManager } from "typeorm";
    
    const account_connection = getConnectionManager().get('account');
    const work_connection  = getConnectionManager().get('work');
    

    文档参考

    TypeORM 配置

    相关文章

      网友评论

          本文标题:TypeORM 使用之配置篇

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