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