Node中验证码验证问题,初学者请教~
发布于 7 年前 作者 Xarrow 4614 次浏览 最后一次编辑是 5 年前 来自 问答

用的 ccap生成验证码,通过验证码来验证用户注册,其中 ccap.js 代码如下:

module.exports = function(req, res) {
    var ccap = require('ccap');//Instantiated ccap class
    var captcha = ccap();
    var ary = captcha.get();
    var txt = ary[0];
    var buf = ary[1];
    res.end(buf);
    console.log(txt);
};

app.js中

var ccap = require("../routes/ccap");
app.get("/ccap",ccap);

其中,buf为验证码图像,txt为字符串,通过views/reg.ejs中<img src="/ccap"/>来显示图片验证码, 在useradd.js后台处理中为了验证用户输入的验证码是否与生成的验证码是否一致,需要调用ccap.js中的txt值。

###那么问题来了,txt值怎么样传到adduser.js 中呢? 这个问题应该涉及到node中模块调用的问题,所以我参考了Node.js中exports与module.exports的区别 capp.js 改成这样

module.exports = function(req, res) {
    var ccap = require('ccap');//Instantiated ccap class
    var captcha = ccap();
    var ary = captcha.get();
    var txt = ary[0];
    var buf = ary[1];
    res.end(buf);
	this.test = function (){
		return txt;
	}
};

以此来调用其中的test(),结果可以调用,但报错Cannot read property 'end' of undefined

初学者,请教,该如何传递这个txt

6 回复

估计是res.end(buf);这个方法不存在,如果用EXPRESS 4的话 用res.send()

@tw234tw 我现在用session解决~

@Xarrow 是生成的时候直接往数据库中写入一个session吗?在用户提交的时候再判断?什么时候删除这个session呢,谢谢啦

可以session啊,你试试就知道了

/* GET 验证码. */
router.get('/captcha', (req, res) => {
  const captcha = ccap();
  const ary = captcha.get();
  const binaryData = `data:image/png;base64,${ary[1].toString('base64')}`;

  console.log('text', ary[0]);

  res.json({
    text: ary[0],
    buffer: binaryData,
  });
});

buffer 赋值给 img 的src 就好了

存到redis就好了

回到顶部