ThinkJS 默认创建的项目是按模块来划分的,可以在每个模块下定义不同的配置。其中 common
模块下定义一些通用的配置,其他模块下配置会继承 common
下的配置。如:home
模块下的最终配置是将 common
和 home
模块下配置合并的结果。
项目环境
ThinkJS 默认支持 3 种项目环境,可以根据不同的环境进行配置,以满足不同情况下的配置需要。
- development 开发环境
- testing 测试环境
- production 线上环境
项目里也可以扩展其他的环境,当前使用哪种环境可以在 入口文件 中设置,设置env
值即可。
config/config.js
存放一些基本的配置,如:
config/[name].js
存放具体某个独立功能的配置,如:db.js
为数据库配置,redis
为 redis 配置。
// db.js
export default {
type: 'mysql',
...
};
config/env/[mode].js
不同项目环境的差异化配置,如:env/development.js
,env/testing.js
,env/production.js
// config/env/development.js
export default {
port: 7777,
db: { //开发模式下数据库配置
type: 'mysql',
adapter: {
mysql: {
host: '127.0.0.1',
port: '',
}
}
...
}
}
注
:不同项目环境差异化配置一般不是很多,所以放在一个文件中定义。这时候如果要修改一个独立功能的配置,就需要将独立功能对应的 key 带上。如:上述代码里的修改数据库配置需要将数据库对应的名称 db
带上。
config/locale/[lang].js
国际化语言包配置,如: locale/en.js
,locale/zh-cn.js
。
配置格式采用 key: value
的形式,并且 key
不区分大小写。
加载配置文件
框架支持多种级别的配置文件,会按以下顺序进行读取:
通过 config 方法获取
在 Controller,Logic,Middleware 等地方可以通过 this.config
来获取。如:
let db = this.config('db'); //读取数据库的所有配置
let host = this.config('db.host'); //读取数据库的 host 配置,等同于 db.host
通过 http 对象上的 config 方法获取
http 对象也有 config 方法用来获取相关的配置,如:
let db = http.config('db');
其他地方配置读取
其他地方可以通过 think.config
来读取相关的配置:
let db = think.config('db'); //读取通用模块下的数据库配置
let db1 = think.config('db', undefined, 'home'); //获取 home 模块下数据库配置
注
:路由解析前,无法通过 config
方法或者 http 对象上的 config
方法来获取非通用模块下的配置,所以路由解析前就使用的配置需要定义在通用模块里。
系统默认配置
env
项目模式下的配置,config/env/development.js
。
export default {
auto_reload: true,
log_request: true,
gc: {
on: false
},
error: {
detail: true
}
}
config/env/testing.js
和 config/env/produciton.js
无默认配置。
locale
国际化语言包配置,默认的配置如下:
config
基本配置,config/config.js
。
export default {
host: '', //服务监听的 host
encoding: 'utf-8', //项目编码
pathname_prefix: '', //pathname 去除的前缀,路由解析中使用
pathname_suffix: '.html', //pathname 去除的后缀,路由解析中使用
hook_on: true, //是否开启 hook
cluster_on: false, //是否开启 cluster
auto_reload: false, //自动重新加载修改的文件,development 模式下使用
resource_on: true, // 是否处理静态资源请求, porxy_on 开启下可以关闭该配置
resource_reg: /^(static\/|[^\/]+\.(?!js|html)\w+$)/, //静态资源的正则
route_on: true, //是否开启自定义路由
log_error: true, //是否打印错误日志
log_request: false, //是否打印请求的日志
create_server: undefined, //自定义启动服务
output_content: undefined, //自定义输出内容处理方式,可以进行 gzip 处理等
deny_module_list: [], //禁用的模块列表
default_module: 'home', //默认模块
default_controller: 'index', //默认的控制器
default_action: 'index', //默认的 Action
callback_name: 'callback', //jsonp 请求的 callback 名称
json_content_type: 'application/json', //json 输出时设置的 Content-Type
}
cache
缓存配置,config/cache.js
。
export default {
type: 'file', //缓存方式
adapter: {
file: {
timeout: 6 * 3600, //6 hours
path: think.RUNTIME_PATH + '/cache', //文件缓存模式下缓存内容存放的目录
path_depth: 2, //子目录深度
file_ext: '.json' //缓存文件的扩展名
},
redis: {
prefix: 'thinkjs_', //缓存名称前缀
}
}
};
cookie
cookie 配置,config/cookie.js
。
export default {
domain: '', // cookie domain
path: '/', // cookie path
httponly: false, //是否 httponly
secure: false, //是否在 https 下使用
timeout: 0 //cookie 有效时间
};
db
export default {
type: 'mysql', //数据库类型
log_sql: true, //是否记录 sql 语句
log_connect: true, // 是否记录连接数据库的信息
adapter: {
mysql: {
host: '127.0.0.1', //数据库 host
port: '', //端口
database: '', //数据库名称
user: '', //账号
password: '', //密码
prefix: 'think_', //数据表前缀
encoding: 'utf8', //数据库编码
nums_per_page: 10, //一页默认条数
}
}
};
error
错误信息配置,config/error.js
。
export default {
key: 'errno', //error number
value: 1000 //default errno
};
gc
缓存、Session等垃圾处理配置,config/gc.js
。
export default {
on: true, //是否开启垃圾回收处理
interval: 3600, // 处理时间间隔,默认为一个小时
let hour = (new Date()).getHours();
if(hour === 4){
return true;
}
}
};
hook
hook 配置,config/hook.js
。
post
post 请求时的配置,config/post.js
。
export default {
json_content_type: ['application/json'],
max_file_size: 1024 * 1024 * 1024, //1G
max_fields: 100,
max_fields_size: 2 * 1024 * 1024, //2M,
ajax_filename_header: 'x-filename',
file_upload_path: think.RUNTIME_PATH + '/upload',
file_auto_remove: true
};
redis
redis 配置,config/redis.js
。
export default {
host: '127.0.0.1',
port: 6379,
password: '',
timeout: 0,
log_connect: true
};
memcache
memcache 配置,config/memcache.js
。
export default {
host: '127.0.0.1', //memcache host
port: 11211,
username: '', //
password: '',
timeout: 0, //缓存失效时间
log_connect: true
};
session
session 配置,config/session.js
。
export default {
name: 'thinkjs',
type: 'file',
path: think.RUNTIME_PATH + '/session',
secret: '',
timeout: 24 * 3600,
cookie: { // cookie options
length: 32
}
};
view
视图配置,config/view.js
。
export default {
content_type: 'text/html',
file_ext: '.html',
file_depr: '_',
root_path: '',
type: 'ejs',
adapter: {
ejs: {
}
}
};
websocket
websocket 配置,config/websocket.js
。
export default {
on: false, //是否开启 websocket
type: 'think', //websocket 使用的库
allow_origin: '',
sub_protocal: '',
adapter: undefined,
path: '', //url path for websocket
messages: {
// open: 'home/websocket/open',
};
项目里可以根据需要扩展配置,扩展配置只需在 建立对应的文件即可,如: