大家都知道,我们配置redis服务端时,出于安全考虑,一定要修改默认端口,添加密码。因此,本文介绍当用 koa-generic-session
和 koa-redis
框架实现redis存储session数据、搭建nodejs服务器的时候,更改redis-server端口和密码之后,如何配置koa2-redis框架以及更改参数。
const session=require('koa-generic-session');
const redisStore=require('koa-redis');
app.use(session({
//配置cookie
cookie:{
path:'/',
httpOnly:true,
maxAge:24*60*60*1000,
},
store:redisStore(
//options对象:
{
host:'127.0.0.1',
port:8888,
password:'123456'
//下面这两个是错误写法
//all:`127.0.0.1:8888`
// all:{
// port:8888,
// host:'127.0.0.1',
// password:'123456'
// }
}
)
}));
这里cookie的配置不再赘述。关键在于 store
属性的值,我们要用构造函数redisStore(options)。而这里options应该是什么?参考github里koa-redis源文档对option的介绍,可以是一个all(这个all是json对象还是字符串我也不知道,文档中说的是" Useful things "
),也可以直接写参数。上面代码中被注释掉的两段就是试验。实际结果是那两种都不行。这里正确写法是option就直接传一个json对象,里面的属性我们只需要设置我们更改的部分,即端口和密码,即可。
如果使用注释里的那两个方法给构造函数传参,那么参数将无法被识别(至少在我所安装的版本中是这样),然后我们的koa-session(即redis的客户端)就会使用默认的参数,即端口:6379,且无密码。此时如果redis服务端的端口或密码不是这两个默认值,当我们运行到session时,就会报下面错误
server error TypeError: Cannot set property name of which has only a getter
at defaultErrorHanlder (D:\testServer\node_modules\koa-generic-session\lib\session.js:558:12)
at D:\testServer\node_modules\koa-generic-session\lib\session.js:98:13
at Generator.throw (<anonymous>)
at step (D:\testServer\node_modules\koa-generic-session\lib\session.js:3:191)
at D:\testServer\node_modules\koa-generic-session\lib\session.js:3:402
at processTicksAndRejections (internal/process/task_queues.js:97:5) {
除了端口,主机地址和密码。我们参考官方文档给的API,下面列出一些常用的可以设定的option的值
属性 | 默认值 | 说明 |
---|---|---|
familiy | 4 | ip协议版本 |
connectionName | 无 | 连接名称 |
connectTimeout | 10000 | 连接持续时间 |
path | 无 | 本机domain socket路径 |
keyPrefix | ‘’ | 给session每个键值的前缀 |
其实这个问题是看双越老师的课实践搭服务器来的,课上是没有修改redis端口和密码的,只给了host和port两个参数,用的all格式:all:${127.0.0.1}:${6379}
。这个值本来就是默认值,虽然无法被识别,但和没传参一样,koa-session会自动使用默认值。所以课上没出现问题。
关键在于option的格式问题。直接使用一个json对象传给redisStore()不是已经简洁了吗,再嵌套一个all:{}
感觉稍微有点奇怪。不知道哪位大佬能解释一下,十分感谢 (ง •̀_•́)ง
都是github上的官方项目:
https://pasupulaphani.github.io/node-redis-store/RedisStore.html
https://github.com/tj/connect-redis
https://github.com/koajs/koa-redis
https://github.com/luin/ioredis/blob/master/API.md