运行环境

EggJS提供了三个运行环境:测试环境开发环境生产环境

相应的,EggJS提供四个Config文件,其与运行环境的对应关系如下:

Config文件 运行环境
config.default.js 所有运行环境的缺省配置
config.unittest.js 测试环境
config.local.js 开发环境
config.prod.js 生产环境

配置Redis

集群现在已经成为CabloyJS的一等公民。也就是说,CabloyJS项目随时做好准备,以便部署到集群环境中

CabloyJS的集群特性是基于Redis设计的,因此,需要设置Redis的连接配置信息,这里以开发环境为例:

src/backend/config/config.local.js

  // redis
  const __redisConnectionDefault = {
    host: '127.0.0.1',
    port: 6379,
    password: '',
    db: 0,
  };
  const __redisConnectionDefaultCache = Object.assign({}, __redisConnectionDefault, {
    keyPrefix: `cache_${appInfo.name}:`,
  });
  const __redisConnectionDefaultIO = Object.assign({}, __redisConnectionDefault, {
    keyPrefix: `io_${appInfo.name}:`,
  });

  config.redisConnection = {
    default: __redisConnectionDefault,
    cache: __redisConnectionDefaultCache,
    io: __redisConnectionDefaultIO,
  };

  config.redis = {
    clients: {
      redlock: config.redisConnection.default,
      limiter: config.redisConnection.default,
      queue: config.redisConnection.default,
      broadcast: config.redisConnection.default,
      cache: config.redisConnection.cache,
      io: config.redisConnection.io,
    },
  };

CabloyJS基于Redis实现了多个特性:limiter, queue, broadcast, cache。这些特性默认都访问同一个Redis服务。当访问量上升后,可以考虑进行分离

配置MySQL

EggBornJS针对每个运行环境实现了不同的数据库访问策略

  1. 测试环境:每次启动服务时,总是删除旧的测试数据库,然后创建一个新的测试数据库

  2. 开发环境:每次启动服务时,总是查找可用的测试数据库,如果没有找到就创建一个新的

  3. 生产环境:需要手工创建数据库,并在config.prod.js中指定

通过这种数据库访问策略,在开发阶段可以非常便利的调试数据。比如,开发阶段会经常的变更数据库设计,这时,只需要运行一遍单元测试就可以生效了。基本操作如下:

# 运行单元测试
$ npm run test:backend
# 启动本地开发服务
$ npm run dev:backend

因此,需要单独设置三个运行环境的数据库连接配置信息

1. 测试环境

src/backend/config/config.unittest.js

  // mysql
  config.mysql = {
    clients: {
      // donnot change the name
      __ebdb: {
        host: '127.0.0.1',
        port: '3306',
        user: 'root',
        password: '',
        database: 'sys', // donnot change the name
      },
    },
  };
名称 说明
__ebdb 这是系统内置的MySQL节点名,不允许变更
database 指定为sys,在启动服务时,会自动删除旧的测试数据库,然后创建一个新的测试数据库

2. 开发环境

src/backend/config/config.local.js

  // mysql
  config.mysql = {
    clients: {
      // donnot change the name
      __ebdb: {
        host: '127.0.0.1',
        port: '3306',
        user: 'root',
        password: '',
        database: 'sys', // recommended
      },
    },
  };
名称 说明
database 推荐指定为sys,在启动服务时,查找可用的测试数据库,如果没有找到就创建一个新的测试数据库。如果指定为其他具体的数据库名,就直接使用此数据库

3. 生产环境

src/backend/config/config.prod.js

  // mysql
  config.mysql = {
    clients: {
      // donnot change the name
      __ebdb: {
        host: '127.0.0.1',
        port: '3306',
        user: 'root',
        password: '',
        database: '{{name}}',
      },
    },
  };
名称 说明
database 此数据库需要手工创建

覆盖模块Config

可以使用项目级别的参数覆盖模块级别的参数,从而方便我们从项目层面定制模块的行为参数

src/backend/config/config.default.js

// modules
config.modules = {
  'test-party': {
    message: 'Hello World!',
  },
};