nodejs使用redis模块并实现图形验证码功能

2020-07-01 17:11:14 浏览数 (1)

Contents

  • 1 nodejs连接redis模块
    • 1.1 redis的使用
    • 1.2 实现图形验证码
    • 1.3 总结

nodejs连接redis模块

redis的使用
  • 安装 redis 模块
代码语言:javascript复制
 npm install redis --save
  • 进行redis的一些配置
代码语言:javascript复制
module.exports = {
    redis:{
        url:'localhost',
        port:6379,
        password:'123456'
    }
}

上述配置中,urlredis服务的地址。portredis服务的端口号,这里是默认端口,passwordredis的密码。

  • 编写redis工具函数

内容太多了,具体看代码及注释吧。

代码语言:javascript复制
const redis = require('redis');
const config = require('./keys').redis

const client = redis.createClient(config.port, config.url); // 实例redis对象

//连接错误处理
client.on("error", err => {
    console.log('redis connect err', err);
});

client.on('connect', () => {
    console.log('redis connect success');
})

//验证redis
client.auth(config.password);

const redisHelper = {};

/**
 * redisHelper setString function
 * @param key
 * @param value
 * @param expire
 */
redisHelper.setString = (key, value, expire) => {
    return new Promise((resolve, reject) => {
        client.set(key, value, function (err, result) {

            if (err) {
                console.log(err);
                reject(err);
            }

            if (!isNaN(expire) && expire > 0) {
                client.expire(key, parseInt(expire));
            }
            resolve(result)
        })
    })
}

/**
 * redisHelper getString function
 * @param key
 */
redisHelper.getString = (key) => {
    return new Promise((resolve, reject) => {
        client.get(key, function (err, result) {
            if (err) {
                console.log(err);
                reject(err)
            }
            resolve(result)
        });
    })
}

module.exports = redisHelper;
  • 使用redis
  1. redisHelper.setString(key, value, expire) 设置redis函数
代码语言:javascript复制
  redisHelper.setString('name','w候人兮猗',60 * 3).then((res)=>{
                console.log('设置成功')
            }).catch((err=>{
                console.log('设置失败',err)
            }))
  1. redisHelper.getString(key) 获取redis函数
代码语言:javascript复制
redisHelper.getString('name')
               .then(result=>{
                   return res.json(result)
               })
               .catch(err=>{
                   console.log(err)
               })
实现图形验证码
  • 安装svg-captcha模块
代码语言:javascript复制
npm install svg-captcha --save
  • 使用svg-captcha模块
代码语言:javascript复制
const svgCaptcha = require('svg-captcha')

const captcha = svgCaptcha.create({
                // 翻转颜色
                inverse: false,
                // 字体大小
                fontSize: 36,
                // 噪声线条数
                noise: 2,
                // 宽度
                width: 80,
                // 高度
                height: 30,
            });

captcha就是生成的验证码实例 – 将验证码保存至redis

代码语言:javascript复制
 redisHelper.setString(email, captcha.text.toLowerCase(), effectTime).then(result => {
                if (result) {
                    res.setHeader('Content-Type', 'image/svg xml');
                    res.write(String(captcha.data));
                    res.end();
                }
            }).catch(err => {
                console.log(err);
                return res.json({
                    ...MsgUtil.createWarnMsg('验证码获取失败')
                })
            })
  • 查看结果 使用postman调我们写好的接口

查看redis中

总结

简单的写了一下node如果使用redis以及如何生成图形验证码。主要目的是为了在设计登陆注册的时候有图形验证码可以简单防止频繁的刷登陆注册接口。将验证码存于redis中主要是因为redis是一个key-value类型的缓存。用完即删除,十分适用于这样的临时存值的需求

0 人点赞