文档章节

【Nodejs项目手记】Nodejs中使用图片验证码,captchapng模块可以解决Nodejs图

bling-兴哥
 bling-兴哥
发布于 2016/06/26 18:35
字数 415
阅读 114
收藏 0

 

Nodejs项目,在做图片验证码的时候遇到了难题。Nodejs没有图片库,以后会有,但是现在没有。

 

网络上搜索一圈,有几个解决方案:

 

1、采用第三方验证码程序,有的时候,项目可能不允许;

2、使用Java或者PHP生成图片,Nodejs调用,中间采用Redies共享;

 

这两种方式都不太理想,好在终于找到了可以支持Nodejs图片验证码的一个库,虽然只支持数字,但是也还不错。原理是使用Base64的图片编码方式。

 

这个库的Gighub地址是:https://github.com/GeorgeChan/captchapng

 

使用方法这个主页上都有,这里还是补充一下:

 

1、在Node项目的package.json中增加captchapng模块;

2、使用如下代码:

/**

 * 图片验证码

 * @param req

 * @param res

 * @param next

 */

function randomcodePngController(req , res , next){

    var code = '0123456789';

    var length = 4;

    var randomcode = '';

    for (var i = 0; i < length; i++) {

        randomcode += code[parseInt(Math.random() * 1000) % code.length];

    }

    // 保存到session

    if (null == req.session[sessionConstant.login]) {

        req.session[sessionConstant.login] = {};

    }

    req.session[sessionConstant.login][sessionConstant.randomcode] = randomcode;

   // 输出图片

     var p = new captchapng(80,30,parseInt(randomcode)); // width,height,numeric captcha

    p.color(255, 255, 255, 0);  // First color: background (red, green, blue, alpha)

    p.color(80, 80, 80, 255); // Second color: paint (red, green, blue, alpha)

    var img = p.getBase64();

    var imgbase64 = new Buffer(img,'base64');

    res.writeHead(200, {

        'Content-Type': 'image/png'

    });

    res.end(imgbase64);

}

 

3、给这个controller写一个路径,页面就可以直接在img标签里面增加src属性了。

 

这样就搞定了Nodejs的图片验证码,希望Nodejs尽快补充缺乏的库。

 

© 著作权归作者所有

共有 人打赏支持
bling-兴哥
粉丝 0
博文 13
码字总数 10623
作品 0
东丽
私信 提问
使用 HTTP 上传 G 级的文件之 Node.js 版本

不管喜欢与否,javascript无处不在。 我们可以在客户端的前台应用中找到它,也可以在大量的框架、类库中找到它,而且可以在服务器端的后台应用中找到它。 近年来, Javascript越来越流行,这...

oschina
2014/11/02
7.9K
16
新手如何快速入门node.js

我当初学的时候,是在大大们的指导下开始学习的,用了3天搞定大大们给的任务。下面我就把这个经历分享出来,让大家借鉴一下。欢迎吐槽~~ 任务如下: 根据Node js 开发入门教程第五章的一个使...

rin9958
2016/03/28
132
0
《Node.js》之事件处理机制以及事件环机制(二)

传统服务器与Node.js的比较 传统的服务器在面临高并发的场景时,会使用多线程方案,服务器会为客户端的请求分配一个线程,使用同步的I/O,系统通过线程切换来弥补同步I/O调用过程中的时间开销...

同Young不同样
08/08
0
0
Node.js 的后期诊断和调试

在你希望判断出你的 Node.js 应用在生产环境中发生了什么错误时,后期诊断和调试就显得尤为重要了。 这里我们探讨 node-report 这个核心项目,用来帮助我们进行后期诊断和调试。 Node.js At...

TanJx
2017/06/21
1K
2
Node.js模块以及模块加载机制

Node.js中的模块 在Node.js中,以模块为单位划分功能,通过一个完整的模块加载机制使得开发人员可以将应用程序划分为多个不同的部分。模块的使用可以提高代码重用率,提高应用程序的开发效率...

同Young不同样
08/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

git reset放弃修改&放弃增加文件

1. 本地修改了一堆文件(并没有使用git add到暂存区),想放弃修改。 单个文件/文件夹: $ git checkout -- filename 所有文件/文件夹: $ git checkout . 2. 本地新增了一堆文件(并没有git a...

JamesView
7分钟前
0
0
UnaryOperator函数式接口

这是一个函数式接口,因此可以用作lambda表达式或方法引用的赋值目标。 可以看到UnaryOperator<T>继承了Function<T,T>接口,这里可是两个T,T,还增加了static修饰的identity()方法。 然后我们...

woshixin
7分钟前
0
0
关于java包装类型的缓存

除了Float 和 Double 外,其他包装数据类型都会缓存 -128 ~127 的值,对于 Integer var = ? 在 -127~128 之间的赋值,Integer 对像由IntegerCache.cache 产生,会复用已有对像,这个区间内的...

Canaan_
10分钟前
1
0
mysql复合主键

表: CREATE TABLE `w_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`,`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 实践: 1、添加i......

shikamaru
11分钟前
0
0
记一下自己理解的SSL

步骤 操作 客户端钥匙(随机数)数量 服务端钥匙(随机数)数量 1 客户端生成一把钥匙, 发给服务器 1 0 2 服务器确认支持 1 1 3 服务器 生成一把钥匙 发给客户端,并且把公钥(证书)给他 ...

Gavin-King
14分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部