thinkjs-redis配置问题
配置
Config / 配置
实际项目中,肯定需要各种配置,包括:框架需要的配置以及项目自定义的配置。ThinkJS 将所有的配置都统一管理,文件都放在 src/config/
目录下(多模块项目放在 src/common/config/
),并根据不同的功能划分为不同的配置文件。
config.js
通用的一些配置adapter.js
adapter 配置router.js
自定义路由配置middleware.js
middlware 配置validator.js
数据校验配置extend.js
extend 配置
配置格式
// src/config.jsmodule.exports = {port: 1234,redis: {host: '192.168.1.2',port: 2456,password: ''} }
配置值即可以是一个简单的字符串,也可以是一个复杂的对象,具体是什么类型根据具体的需求来决定。
多环境配置
有些配置需要在不同的环境下配置不同的值,如:数据库的配置在开发环境和生产环境是不一样的,此时可以通过环境下对应不同的配置文件来完成。
多环境配置文件格式为:[name].[env].js
,如:config.development.js
,config.production.js
在以上的配置文件中,目前只有 config.js
和 adapter.js
是支持不同环境配置文件的。
系统默认配置
系统内置一些默认配置,方便项目里直接使用,具体有:
- config.js 通用的默认配置 { port: 8360, // server port // host: '127.0.0.1', // server host, the default config removed from 3.1.0 workers: 0, // server workers num, if value is 0 then get cpus num createServer: undefined, // create server function startServerTimeout: 3000, // before start server time reloadSignal: 'SIGUSR2', // reload process signal stickyCluster: false, // sticky cluster, add from 3.1.0 onUnhandledRejection: err => think.logger.error(err), // unhandledRejection handle onUncaughtException: err => think.logger.error(err), // uncaughtException handle processKillTimeout: 10 * 1000, // process kill timeout, default is 10s jsonpCallbackField: 'callback', // jsonp callback field jsonContentType: 'application/json', // json content type errnoField: 'errno', // errno field errmsgField: 'errmsg', // errmsg field defaultErrno: 1000, // default errno validateDefaultErrno: 1001 // validate default errno };
配置合并方式
系统启动时,会对配置合并,最终提供给开发者使用。具体流程为:
- 加载
[ThinkJS]/lib/config/config.js
- 加载
src/config/config.js
- 加载
src/config/config.[env].js
- 加载
[ThinkJS]/lib/config/adapter.js
- 加载
[ThinkJS]/lib/config/adapter.[env].js
- 加载
src/config/adapter.js
- 加载
src/config/adapter.[env].js
[env]
为当前环境名称。最终会将这些配置按顺序合并在一起,同名的 key 后面会覆盖前面的。
配置加载是通过 think-loader 模块实现的,获取到合并后的配置后,通过 think-config 模块实例化后放在 think.config
上,后续通过 think.config
来获取或者设置配置。
使用配置
框架提供了在不同的环境下不同的方式快速获取配置:
- 在 ctx 中,可以通过
ctx.config(key)
来获取配置 - 在 controller 中,可以通过
controller.config(key)
来获取配置 - 其他情况下,可以通过
think.config(key)
来获取配置
实际上,ctx.config
和 controller.config
是基于 think.config 包装的一种更方便的获取配置的方式。
const redis = ctx.config('redis'); //获取 redis 配置
module.exports = class extends think.Controller {indexAction() {const redis = this.config('redis'); // 在 controller 中通过 this.config 获取配置} }
动态设置配置
除了获取配置,有时候需要动态设置配置,如:将有些配置保存在数据库中,项目启动时将配置从数据库中读取出来,然后设置上去。
框架也提供了动态设置配置的方式,如:think.config(key, value)
// src/bootstrap/worker.js//HTTP 服务启动前执行 think.beforeStartServer(async () => {const config = await think.model('config').select();think.config('userConfig', config); //从数据库中将配置读取出来,然后设置 })
常见问题
能否将请求中跟用户相关的值设置到配置中?
不能
。配置设置是全局的,会在所有请求中生效。如果将请求中跟用户相关的值设置到配置中,那么多个用户同时请求时会相互干扰。
config.js 和 adapter.js 中的 key 能否重名?
不能
。由于 config.js 和 adapter.js 是合并在一起的,所以要注意这二个配置不能有相同的 key,否则会被覆盖。
怎么查看合并后的所有配置?
系统启动时,会合并 config.js 和 adapter.js 的配置,最终会将配置写到文件 runtime/config/[env].json
文件中,如:当前 env 是 development
,那么写入的文件为 runtime/config/development.json
。
配置写入文件时,是通过 JSON.stringify
将配置转化为字符串,由于 JSON.stringify 不支持正则、函数等之类的转换,所以配置中由于字段的值是正则或者函数时,生成的配置文件中将看不到这些字段对应的值。
多模块项目配置文件存放位置?
以上文档中描述的配置文件路径都是单模块项目下的,多模块项目下配置文件的路径为 src/common/config/
,配置文件名称以及格式和单模块相同,如:src/common/config/config.js
、src/common/config/adapter.js
、src/common/config/middleware.js
等。
多模块项目下有些配置可以放在模块目录下,路径为:/src/[module]/config/
,[module]
为具体的模块名称。
如何查看配置文件的详细加载情况?
有时候希望查看配置文件的详细加载情况,这时候可以通过 DEBUG=think-loader-config-* npm start
来启动项目查看。
think-loader-config-40322 load file: //demo/app/config/adapter.js +3ms think-loader-config-40323 load file: /demo/node_modules/thinkjs/lib/config/adapter.js +5ms think-loader-config-40320 load file: /demo/app/config/adapter.js +4ms think-loader-config-40323 load file: /demo/app/config/adapter.js +3ms think-loader-config-40325 load file: /demo/app/config/config.js +0ms think-loader-config-40325 load file: /demo/node_modules/thinkjs/lib/config/adapter.js +5ms think-loader-config-40325 load file: /demo/app/config/adapter.js +3ms think-loader-config-40321 load file: /demo/app/config/config.js +0ms think-loader-config-40321 load file: /demo/node_modules/thinkjs/lib/config/adapter.js +5ms think-loader-config-40321 load file: /demo/app/config/adapter.js +3ms think-loader-config-40324 load file: /demo/app/config/config.js +0ms think-loader-config-40319 load file: /demo/app/config/config.js +0ms think-loader-config-40319 load file: /demo/node_modules/thinkjs/lib/config/adapter.js +6ms think-loader-config-40324 load file: /demo/node_modules/thinkjs/lib/config/adapter.js +5ms think-loader-config-40319 load file: /demo/app/config/adapter.js +7ms think-loader-config-40324 load file: /demo/app/config/adapter.js +8ms
由于服务是通过 Master + 多个 Worker 启动的,debug 信息会打印多遍,这里为了区分加上了进程的 pid 值,如:think-loader-config-40322
为进程 pid 为 40322
下的配置文件加载情况。
thinkjs-redis配置问题相关推荐
- 基于redis的简易分布式爬虫框架
代码地址如下: http://www.demodashi.com/demo/13338.html 开发环境 Python 3.6 Requests Redis 3.2.100 Pycharm(非必需, ...
- Redis+SSO初步
经过好几天的查找和各种追问,今天终于算是对sso有个大概的了解,不过在网上sso大部分都需要依赖于Redis,所以我这里先安装Redis 由于电脑问题安装不了Linux,我就直接安装Windows版本 ...
- 解决Redis报错Redis is configured to save RDB snapshots, but it is currently not able to persist on disk
Redis报错信息 在Spring Boot中集成Redis客户之后,进行数据操作,发现报如下错误: org.springframework.data.redis.RedisSystemExcepti ...
- yii2设置session时间_关于 Swoft 2.0 版本用 Redis 存储 session 时配置问题
Swoft 2.0 在 session 配置上和 1.0 还是有一些不同地方,而关于这些在 github 上完全没有任何说明,甚至连文档也没有.经过逐步梳理源代码(其中要理解他的 "注解&q ...
- sau交流学习社区--基于thinkjs+vue+redis+mysql+es6开发的周报企业管理系统weekly
weekly 周报系统主要是node+vue+redis+mysql+es6,一个企业管理系统,企业员工汇报每周工作情况,以及完成情况,各级负责人可以查看和提醒相应未写周报人员. ,后端完全使用nod ...
- 调试笔记 — Redis 消息队列发布信息被消费者重复订阅多次牵扯到的 Tomcat 配置问题 [#00001]
最近在项目中发现了一个奇葩的 BUG ,当用户调用后台时,后台向消息队列中发布一条消息,这条消息会被监听器(消费者)监听到,有趣的事情就在这里,此时由于只发送了一条消息,照理说监听器应该只会触发一次, ...
- java连接redis无法连接,报异常RedisConnectionException
不管是spring还是原生jedis连接redis,如果连不上多半是linux服务器的问题: 1 首先确保redis端口开放: 把6379或者redis的端口开放即可 2 redis.conf配置注释 ...
- 配置redis禁用几个危险命令
这几天客户一直给我反映一个问题,那就是他的缓存服务器redis每天会清理库,很纳闷,我配置的redis一般保持的默认,不应该会每天去清理库的,感觉应该还是他的程序上有点问题吧. 不过,不管程序问题还是 ...
- 29 | 案例篇:Redis响应严重延迟,如何解决?
在访问商品搜索接口时,我们发现接口的响应特别慢.通过对系统 CPU.内存和磁盘 I/O 等资源使用情况的分析,我们发现这时出现了磁盘的 I/O 瓶颈,并且正是案例应用导致的. 接着,我们借助 pids ...
- 主机无法连接虚拟机中的redis服务
解决:主机<本地>无法连接虚拟机中的redis服务 首先保证虚拟机网络已经和主机网络互通,即相互ping对方IP,能ping通但是仍然连不上redis服务,可能是以下问题. redis服务 ...
最新文章
- P1494 小Z的袜子
- IC/FPGA笔试题分析(六)用16bit加法器IP核实现8bit乘法运算(文末彩蛋)
- 语言 双线性内插_合资插混间的实力较量,微蓝6 PHEV和卡罗拉双擎E+谁更值得选...
- 首次合作带给我的感想
- HDU5985 Lucky Conins 概率题
- alertmanager 告警恢复_Prometheus配置企业微信告警
- qtp11安装及入门
- 计算机操作入门基础知识,电脑入门基本操作知识
- 小学计算机优秀说课稿ppt,【说课备考】各学科说课稿示范第7天 — 小学信息技术...
- MFC列表控件report报表可编辑操作
- 访问局域网计算机切换用户,Win7切换用户账户访问共享文件夹的方法
- java程序员生日祝福语_给程序员的一句话祝福语
- 异数OS 星星之火(一)-- 异数OS-织梦师云 用户使用手册
- C++设计模式17:中介者模式
- 手机dpi修改工具_修改手机的分辨率,让你的手机更流畅
- 克转换成千克怎么算python_磅到公斤和克的转换python函数
- Mac os下快速从终端进入Finder 从Finder进入终端
- 将QLV视频格式转换为MP4格式
- 各厂内推整理 | 第五期
- 泛微oa 控制行显示、隐藏
热门文章
- Arduino与Proteus仿真实例-温控风扇仿真
- 【信息论是什么?信息,消息和信号?】信息论与编码入门(一)
- Arcgis小技巧【12】——ArcGIS标注的各种用法和示例
- 武汉理工大学余家头校区计算机学院研究生宿舍(男生)条件如何,2021年武汉理工大学新生宿舍环境内部图片,男生女生宿舍条件(图)...
- 【集合论】划分 ( 划分 | 划分示例 | 划分与等价关系 )
- apache优化速度--嗖嗖嗖
- 超级表格上线消息提醒功能了~
- gprs java_WISMO模块GPRS上网设置的过程
- deepin安装瑞昱Realtek无线网卡8188GU驱动
- 各种疑似DGA域名大全