CNode

egg 不同controller 共享数据

问答
HHelovebai发布于8 年前最后回复8 年前10 回复7569 浏览0 收藏

egg框架下遇到的问题: 需求如下: 前端调用获取验证码的接口,返回相应的code,完了提交表单,后端验证验证码输入是否正确。 本人思路如下: 在controller中新建全局变量codeMap,绑在global上,在获取验证码的方法中添加code,在验证表单的接口,循环codeMap,返回相应结果。 出现错误如下: egg dev本地调试完全ok,但是上线就会出现codeMap中找不到获取验证码时添加的code,所以会报错。

希望各位大神赐教,我已经快疯了 =,=。。。。。

查看回复

回复 (10)

A
atian25#1·8 年前

因为正式环境是多进程的。。。 你应该学习下数据库或 redis 之类的外部缓存

W
waitingsong#2·8 年前

egg 生产环境运行时是多进程模式相互隔离的。我之前也遇到相同的情况调试正常作生产环境测试时傻了,数据量很小不考虑外部存储于是就通过消息机制往agent里面存取了。 唯一的问题是不支持传递 map 类型数据(没试过set)。

F
fhawk#3·8 年前

使用session,https://github.com/eggjs/egg-session,建议用redis。 生成的code保存在session里,用户提交,与session里的code比较。为什么要创建成全局变量?node.js一般不推荐使用全局变量。

J
JZLeung#4·8 年前

redis 试试可以不。我一般都是放 redis 里面的。 当然啦,我是个假后台。

F
feixiayufeixia#5·8 年前

@JZLeung  。。

O
okoala#7·8 年前

缓存服务赶紧用起来吧~~

U
unliar#8·8 年前

下发

  1. 用户向后端请求验证码-->带上key标识.
  2. 检查redis是否存在用户的验证码
  3. 如果有,就取出来发给前端 || 如果没有,你的程序生成一个,设置有效期存到redis,发送给前端

校验

  1. 用户提交验证码和用来存储redis时用到的key标识到后端
  2. 后端获取 去redis里做匹配
  3. 返回匹配结果
V
vendar#10·8 年前

这种数据使用redis/mongodb/mysql额外的存储即可,否则多进程、服务重启等就容易导致数据丢失或不一致。

来自✨ Node.js开源项目精选

参与回复
登录后即可参与回复。登录