egg框架下遇到的问题: 需求如下: 前端调用获取验证码的接口,返回相应的code,完了提交表单,后端验证验证码输入是否正确。 本人思路如下: 在controller中新建全局变量codeMap,绑在global上,在获取验证码的方法中添加code,在验证表单的接口,循环codeMap,返回相应结果。 出现错误如下: egg dev本地调试完全ok,但是上线就会出现codeMap中找不到获取验证码时添加的code,所以会报错。
希望各位大神赐教,我已经快疯了 =,=。。。。。
因为正式环境是多进程的。。。 你应该学习下数据库或 redis 之类的外部缓存
egg 生产环境运行时是多进程模式相互隔离的。我之前也遇到相同的情况调试正常作生产环境测试时傻了,数据量很小不考虑外部存储于是就通过消息机制往agent里面存取了。 唯一的问题是不支持传递 map 类型数据(没试过set)。
使用session,https://github.com/eggjs/egg-session,建议用redis。 生成的code保存在session里,用户提交,与session里的code比较。为什么要创建成全局变量?node.js一般不推荐使用全局变量。
redis 试试可以不。我一般都是放 redis 里面的。 当然啦,我是个假后台。
@JZLeung 。。
@waitingsong 大哥, agent怎么 用呀 ? 能说的稍微详细点儿么 ? 谢谢谢谢
缓存服务赶紧用起来吧~~
下发
- 用户向后端请求验证码–>带上key标识.
- 检查redis是否存在用户的验证码
- 如果有,就取出来发给前端 || 如果没有,你的程序生成一个,设置有效期存到redis,发送给前端
校验
- 用户提交验证码和用来存储redis时用到的key标识到后端
- 后端获取 去redis里做匹配
- 返回匹配结果
这种数据使用redis/mongodb/mysql额外的存储即可,否则多进程、服务重启等就容易导致数据丢失或不一致。
来自✨ Node.js开源项目精选✨