ThinkJS 默认创建的项目是按模块来划分的,可以在每个模块下定义不同的配置。其中 common 模块下定义一些通用的配置,其他模块下配置会继承 common 下的配置。如:home 模块下的最终配置是将 commonhome 模块下配置合并的结果。

项目环境

ThinkJS 默认支持 3 种项目环境,可以根据不同的环境进行配置,以满足不同情况下的配置需要。

  • development 开发环境
  • testing 测试环境
  • production 线上环境
    项目里也可以扩展其他的环境,当前使用哪种环境可以在 入口文件 中设置,设置 env 值即可。
config/config.js

存放一些基本的配置,如:

config/[name].js

存放具体某个独立功能的配置,如:db.js 为数据库配置,redis 为 redis 配置。

  1. // db.js
  2. export default {
  3. type: 'mysql',
  4. host: '127.0.0.1',
  5. port: '',
  6. name: '',
  7. user: '',
  8. ...
  9. };
config/env/[mode].js

不同项目环境的差异化配置,如:env/development.jsenv/testing.jsenv/production.js

  1. // config/env/development.js
  2. export default {
  3. port: 7777,
  4. db: { //开发模式下数据库配置
  5. type: 'mysql',
  6. host: '127.0.0.1',
  7. port: '',
  8. ...
  9. }
  10. }

:不同项目环境差异化配置一般不是很多,所以放在一个文件中定义。这时候如果要修改一个独立功能的配置,就需要将独立功能对应的 key 带上。如:上述代码里的修改数据库配置需要将数据库对应的名称 db 带上。

config/locale/[lang].js

国际化语言包配置,如: locale/en.jslocale/zh-cn.js


配置格式采用 key: value 的形式,并且 key 不区分大小写。

加载配置文件

框架支持多种级别的配置文件,会按以下顺序进行读取:

通过 config 方法获取

在 Controller,Logic,Middleware 等地方可以通过 this.config 来获取。如:

  1. let db = this.config('db'); //读取数据库的所有配置
  2. let host = this.config('db.host'); //读取数据库的 host 配置,等同于 db.host

通过 http 对象上的 config 方法获取

http 对象也有 config 方法用来获取相关的配置,如:

  1. let db = http.config('db');

其他地方配置读取

其他地方可以通过 think.config 来读取相关的配置:

  1. let db = think.config('db'); //读取通用模块下的数据库配置
  2. let db1 = think.config('db', undefined, 'home'); //获取 home 模块下数据库配置

:路由解析前,无法通过 config 方法或者 http 对象上的 config 方法来获取非通用模块下的配置,所以路由解析前就使用的配置需要定义在通用模块里。

系统默认配置

env

项目模式下的配置,config/env/development.js

  1. export default {
  2. auto_reload: true,
  3. log_request: true,
  4. gc: {
  5. on: false
  6. },
  7. error: {
  8. detail: true
  9. }

config/env/testing.jsconfig/env/produciton.js 无默认配置。

locale

国际化语言包配置,默认的配置如下:

config

基本配置,config/config.js

  1. export default {
  2. port: 8360, //服务监听的端口
  3. host: '', //服务监听的 host
  4. encoding: 'utf-8', //项目编码
  5. pathname_prefix: '', //pathname 去除的前缀,路由解析中使用
  6. pathname_suffix: '.html', //pathname 去除的后缀,路由解析中使用
  7. proxy_on: false, //是否使用 nginx 等 web server 进行代理
  8. cluster_on: false, //是否开启 cluster
  9. service_on: true, //Service available
  10. timeout: 120, //120 seconds
  11. auto_reload: false, //自动重新加载修改的文件,development 模式下使用
  12. resource_on: true, // 是否处理静态资源请求, porxy_on 开启下可以关闭该配置
  13. resource_reg: /^(static\/|[^\/]+\.(?!js|html)\w+$)/, //静态资源的正则
  14. route_on: true, //是否开启自定义路由
  15. log_pid: false, //是否记录服务的 pid
  16. log_request: false, //是否打印请求的日志
  17. create_server: undefined, //自定义启动服务
  18. output_content: undefined, //自定义输出内容处理方式,可以进行 gzip 处理等
  19. deny_module_list: [], //禁用的模块列表
  20. default_module: 'home', //默认模块
  21. default_controller: 'index', //默认的控制器
  22. default_action: 'index', //默认的 Action
  23. callback_name: 'callback', //jsonp 请求的 callback 名称
  24. json_content_type: 'application/json', //json 输出时设置的 Content-Type
  25. subdomain: {} //子域名部署配置
  26. }

cache

缓存配置,config/cache.js

  1. export default {
  2. type: 'file', //缓存方式
  3. prefix: 'thinkjs_', //缓存名称前缀
  4. timeout: 6 * 3600, //6 hours
  5. path: runtimePrefix + '/cache', //文件缓存模式下缓存内容存放的目录
  6. path_depth: 2, //子目录深度
  7. file_ext: '.json' //缓存文件的扩展名
  8. };

cookie 配置,config/cookie.js

  1. export default {
  2. domain: '', // cookie domain
  3. path: '/', // cookie path
  4. httponly: false, //是否 httponly
  5. secure: false, //是否在 https 下使用
  6. timeout: 0 //cookie 有效时间
  7. };

db

  1. export default {
  2. type: 'mysql', //数据库类型
  3. host: '127.0.0.1', //数据库 host
  4. port: '', //端口
  5. name: '', //数据库名称
  6. user: '', //账号
  7. pwd: '', //密码
  8. prefix: 'think_', //数据表前缀
  9. encoding: 'utf8', //数据库编码
  10. nums_per_page: 10, //一页默认条数
  11. log_sql: true, //是否记录 sql 语句
  12. log_connect: true, // 是否记录连接数据库的信息
  13. cache: { // 查询数据缓存配置
  14. on: true,
  15. type: '',
  16. timeout: 3600
  17. }
  18. };

error

错误信息配置,config/error.js

  1. key: 'errno', //error number
  2. msg: 'errmsg', //error message
  3. value: 1000 //default errno
  4. };

gc

缓存、Session等垃圾处理配置,config/gc.js

  1. export default {
  2. interval: 3600, // 处理时间间隔,默认为一个小时
  3. filter: function(){ //如果返回 true,则进行垃圾回收处理
  4. let hour = (new Date()).getHours();
  5. if(hour === 4){
  6. return true;
  7. }
  8. }
  9. };

hook

hook 配置,config/hook.js

post

post 请求时的配置,config/post.js

  1. export default {
  2. json_content_type: ['application/json'],
  3. max_file_size: 1024 * 1024 * 1024, //1G
  4. max_fields: 100,
  5. max_fields_size: 2 * 1024 * 1024, //2M,
  6. ajax_filename_header: 'x-filename',
  7. file_upload_path: runtimePrefix + '/upload',
  8. file_auto_remove: true
  9. };

redis

redis 配置,config/redis.js

  1. export default {
  2. host: '127.0.0.1',
  3. port: 6379,
  4. password: '',
  5. timeout: 0,
  6. log_connect: true
  7. };

memcache

memcache 配置,config/memcache.js

  1. export default {
  2. host: '127.0.0.1', //memcache host
  3. port: 11211,
  4. username: '', //
  5. password: '',
  6. timeout: 0, //缓存失效时间
  7. log_connect: true
  8. };

session

session 配置,config/session.js

  1. export default {
  2. name: 'thinkjs',
  3. type: 'file',
  4. path: runtimePrefix + '/session',
  5. secret: '',
  6. timeout: 24 * 3600,
  7. cookie: { // cookie options
  8. length: 32
  9. }
  10. };

view

视图配置,config/view.js

  1. export default {
  2. content_type: 'text/html',
  3. file_ext: '.html',
  4. file_depr: '_',
  5. root_path: '',
  6. type: 'ejs',
  7. options: {}
  8. };

websocket

websocket 配置,config/websocket.js

  1. export default {
  2. on: false, //是否开启 websocket
  3. type: 'think', //websocket 使用的库
  4. allow_origin: '',
  5. sub_protocal: '',
  6. adapter: undefined,
  7. path: '', //url path for websocket
  8. messages: {
  9. // open: 'home/websocket/open',
  10. };

项目里可以根据需要扩展配置,扩展配置只需在 建立对应的文件即可,如: