使用node.js给前端发送一个图像验证码

这篇具有很好参考价值的文章主要介绍了使用node.js给前端发送一个图像验证码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相信写过node的小伙伴都对此有相关了解

首先导入需要的包(//后有解释)

const mysql = require("mysql");   //用于创建和管理 MySQL 连接池。

const express = require("express");//用于构建 Web 应用程序。

const app = express();

const interface = require("./interface");

const bodyParser = require("body-parser"); //用于解析 HTTP 请求体的内容。

const jwt = require("jsonwebtoken"); //用于生成和验证 JSON Web Tokens(JWT)。

const expressJwt = require("express-jwt"); //用于验证 JWT 并提取用户信息。

const cors = require("cors"); //,用于处理跨域资源共享

const { createCanvas, registerFont } = require("canvas");  //用于在服务器端生成图像。

连接数据库

        user(数据库名称)

        password(数据库密码)

        host(地址值)

        database(数据库名称)

app.use(cors());

// 连接数据库

const secretKey = "itheima NO1";

const dbConfig = {

  user: process.env.DB_USER || "root",

  password: process.env.DB_PASSWORD || "root",

  host: process.env.DB_HOST || "localhost",

  database: process.env.DB_DATABASE || "ry-vue",

};

const conn = mysql.createConnection(dbConfig);

// 解析请求体

app.use(express.json());

app.use(bodyParser.urlencoded({ extended: false }));

app.use(bodyParser.json());

app.use(expressJwt({ secret: secretKey }).unless({ path: [/^\/api\//] }));

下面是我写了一个在图像上有一个10*10之内的加减乘除,并且设置的输出结果为整数且不为负

并且由于我在全局设置了token所以这个接口也需要前端携带token。并且我在写这段是先写的登录。

// 验证码

// 在内存中存储验证码(请用安全的存储解决方案替换此部分)

const verificationCodes = {};

// 生成一个包含加减乘除的简单数学表达式和计算结果

function generateMathExpression() {

  const operators = ["+", "*", "/"]; // 移除减法运算符

  const operator = operators[Math.floor(Math.random() * operators.length)];

  const operand1 = Math.floor(Math.random() * 10);

  const operand2 = Math.floor(Math.random() * 10);

  let result;

  switch (operator) {

    case "+":

      result = operand1 + operand2;

      break;

    case "*":

      result = operand1 * operand2;

      break;

    case "/":

      // 避免除以零,并确保结果不是负数

      result = operand2 !== 0 ? Math.max(1, Math.floor(operand1 / operand2)) : operand1;

      break;

    default:

      result = operand1; // 对于乘法,只返回第一个操作数

  }

  const expression = `${operand1} ${operator} ${operand2} = ?`;

  return { expression, result };

}

并且这边前端使用了uuid库,所以我引入并使用他来生成一个唯一标识符的函数,以下就是我的接口内容

// 带有图形验证码的验证码请求端点

// 生成一个唯一标识符的函数

function generateUniqueIdentifier() {

  return uuidv4();

}

// 带有图形验证码的验证码请求端点

app.post("/api/verification", async (req, res) => {

  try {

    // 生成验证码和图形验证码随机字符串

    const { expression, result } = generateMathExpression();

    // 将验证码存储在内存中(请用安全的存储解决方案替换此部分)

    const timestamp = new Date().getTime();

    const identifier = generateUniqueIdentifier(); // 生成唯一标识符

    verificationCodes[identifier] = { expression, result, timestamp };

    // 创建图像的画布

    const canvas = createCanvas(200, 50);

    const ctx = canvas.getContext("2d");

    // 设置背景颜色

    ctx.fillStyle = "#ffffff";

    ctx.fillRect(0, 0, canvas.width, canvas.height);

    // 设置文本的颜色

    ctx.fillStyle = "#000000";

    // 在画布上绘制数学表达式

    ctx.fillText(expression, 10, 40);

    // 将画布转换为数据 URL

    const image = canvas.toDataURL();

    // 返回图像 URL、验证码和计算结果给前端

    res.status(200).json({

      status: 200,

      message: "成功发送图形验证码",

      imageUrl: image,

      code: result, // 将唯一标识符发送给前端

      uuid: identifier, // 将唯一标识符发送给前端

    });

  } catch (error) {

    handleServerError(res, error);

  }

});

有什么错误欢迎指出文章来源地址https://www.toymoban.com/news/detail-797291.html

到了这里,关于使用node.js给前端发送一个图像验证码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端使用node.js连接sql.server数据库教程

    最近项目中要用到node写接口然后连接公司现有的sql.server数据库,再把执行结果返回给前端(还是我),因为之前一直做前端这块,后端这方面不是很懂,花了很长的时间终于研究出来了(还是太菜了,走了很多弯路),所以写个博客,一是复习巩固,二是给其他有需要的小伙伴一个参考,尽量

    2024年02月11日
    浏览(43)
  • 使用node.js 搭建一个简单的HelloWorld Web项目

    文档结构 config.ini one.js 使用方法 启动内网穿透 在控制台启动js文件 访问网页 修改为8081 登录natapp官网 成功访问

    2024年02月14日
    浏览(37)
  • 使用Node.js手撸一个建静态Web服务器,内部CV指南

    文章里有全部代码,也可以积分下载 操作步骤如上图 文章结束 话说这个键盘真漂亮~~ 1.1 静态Web服务器概念 我们通常称 静态Web服务器 为 静态网站 ,其主要特征就是服务器上的所有内容都是现成的,不需要后端做额外的处理。当我们向静态服务器发送网页请求时,服务器只

    2023年04月08日
    浏览(37)
  • Node.js实现数据验证和校验功能

    在Web开发中经常用到的一种交互效果,它可以在用户点击某个按钮或者触发某个事件时显示一个悬浮框,提供用户与页面进行交互的机会。Vue作为一种流行的JavaScript框架,提供了丰富的工具和方法,可以方便地实现弹窗效果。本文将介绍如何使用Vue实现弹窗效果,并提供具体

    2024年01月21日
    浏览(25)
  • node.js(expree.js )模拟手机验证码功能及登录功能

    dbconfig.js 测试验证码发送 测试登录

    2024年01月19日
    浏览(29)
  • 浅谈 Node.js 与快速入门使用——前端开发工程师必须要知道的技术(文末送书福利6.0)

    当下,各行各业都面临着大数据、人工智能、AR(augmented reality,增强现实)、VR(virtual reality,虚拟现实)等各种互联网新技术的冲击。在此技术背景下,Web前端行业也发生了巨大的改变,前端程序员已从单纯的切图处理发展到了需要处理多种后端业务。其中,Node.js 就是连

    2024年02月09日
    浏览(42)
  • html web前端,点击发送验证码,按钮60秒倒计时

    html web前端,点击发送验证码,按钮60秒倒计时 eaca39b57a49d39f6c9e2f49f2559e9a.jpg

    2024年02月08日
    浏览(38)
  • 前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码

    前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码, 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下: 实现代码如下: 使用方法 HTML代码实现部分 组件实现代码

    2024年02月11日
    浏览(27)
  • node后端+vue前端实现接口请求时携带authorization验证

    我们在写web项目时,后端写好接口,前端想要调用后端接口时,除了登录注册页面,所有的请求都需要携带authorization,这样是为了避免随意通过接口调取数据的现象发生。这是写web项目时最基础的点,但是也挺麻烦的,涉及前后端好几个地方的编码,经常忘记怎么写的,现在

    2024年02月02日
    浏览(40)
  • js 正则表达式 验证 ip列表--详情:页面中一个输入框,可输入1个或多个IP,使用英文逗号隔开...

    var   isIp =  function   (){        var    regexp = /^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/;                       return    function   (value){            var    valid = regexp.test(value);            if   (!valid){   //首先必须是 xxx.xxx.xxx.xxx 类型的数字,如果不是,返回false   

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包