使用node来做一个图片验证码
做一个下面的小案例,应该能够很快的理解。
首先我们需要创建一个项目。
使用express搭建一个简单的服务器。
安装express。
yarn add express
在app文件下这样配置。
const express = require('express')
const app = express()
app.use(express.static('public')) // 配置静态资源
app.listen(80, () => {
console.log('http://127.0.0.1')
})
下面安装svg-captcha第三方模块
yarn add svg-captcha
在app文件下配置
const express = require('express')
const svgCaptcha = require('svg-captcha')
const app = express()
app.get('/getInfo', (req, res) => {
// 下面这行代码是随机生成验证码图片和文本并返回给客户端
const c = svgCaptcha.create({
size: 6, // 验证码长度
ignoreChars: '0o1i', // 验证码字符中排除 0o1i
color: true, // 验证码是否有彩色
noise: 1, //干扰线
background: '#666' // 背景颜色
})
res.send(c)
})
app.use(express.static('public'))
app.listen(80, () => {
console.log('http://127.0.0.1')
})
上面的svgCaptcha.create(option),具体配置可在官方文档。这样基本就完成了,只需要使用ajax请求即可。
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="https://cdn.staticfile.org/jquery/1.10.0/jquery.js"></script>
</head>
<body>
<div id="box"></div>
<button id="btn">刷新</button>
<input type="text" id="ipt" />
<span id="span"></span>
<script>
const box = document.querySelector('#box')
const btn = document.querySelector('#btn')
const ipt = document.querySelector('#ipt')
const span = document.querySelector('#span')
// 存放正确的验证码文本
let validation = ''
// 获取验证码图片和文本
function getInfo() {
$.get('http://127.0.0.1/getInfo', (res) => {
// 正确验证码的信息
validation = res.text
// res.data是一个验证码图片 svg标签
box.innerHTML = res.data
})
}
getInfo()
btn.addEventListener('click', getInfo)
ipt.addEventListener('blur', function (e) {
if (this.value.toLowerCase() === validation.toLowerCase()) {
span.innerHTML = '验证通过'
span.style.color = 'green'
} else {
span.innerHTML = '验证不通过'
span.style.color = 'red'
}
})
</script>
</body>
</html>
最后启动服务器就可以看到效果了
node ./app.js