TypeORM 使用之配置篇

2018-11-04  本文已影响0人  ithankzc

简介

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',
});

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

额外参数

 entities: [Post, Category, "entity/*.js", "modules/**/entity/*.js"]

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

    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 配置

上一篇下一篇

猜你喜欢

热点阅读