You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Konva.js选中画布图形后如何将选中图形类型保存到MySQL数据库

实现步骤拆解

1. Konva.js前端侧:获取选中图形的自定义标识

绘制图形时给每个Konva实例添加自定义属性存储你需要的图形类型标识(如square1、rectangle2),再监听选中事件拿到对应标识后传给后端。
示例代码:

// 初始化舞台与层
const stage = new Konva.Stage({ container: 'container', width: 600, height: 400 });
const layer = new Konva.Layer();
stage.add(layer);

// 绘制图形时添加自定义shapeType属性存标识
const square = new Konva.Rect({
  x: 50, y: 50, width: 80, height: 80, fill: 'blue',
  shapeType: 'square1' // 自定义属性,存储你要保存的图形类型
});
layer.add(square);

// 监听选中事件(点击触发为例,也可适配Konva.Transformer的选中逻辑)
stage.on('click', (e) => {
  // 点击画布空白区域不处理
  if (e.target === stage) return;
  // 取选中图形的自定义标识
  const selectedType = e.target.attrs.shapeType;
  // 调用接口传给后端
  fetch('/save-shape-type', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ shape_type: selectedType })
  });
});

如果是用Konva.Transformer做批量选中,可通过transformer.nodes()拿到所有选中的图形实例,遍历取出所有shapeType后传给后端即可。

2. 后端接口:接收参数并做合法性校验

你可以用任意后端技术栈实现,以下以Node.js+Express为例:

const express = require('express');
const app = express();
// 解析json格式的请求参数
app.use(express.json());

// 图形类型保存接口
app.post('/save-shape-type', async (req, res) => {
  const { shape_type } = req.body;
  // 参数校验:非空、格式符合要求
  if (!shape_type || typeof shape_type !== 'string' || shape_type.length > 50) {
    return res.status(400).json({ code: 400, msg: '参数非法' });
  }
  // 调用数据库插入方法
  const saveResult = await saveToMysql(shape_type);
  res.json(saveResult);
});

app.listen(3000, () => console.log('服务启动在3000端口'));

3. MySQL侧:建表与数据写入

首先创建存储选中图形类型的表,SQL示例:

CREATE TABLE selected_shapes (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键自增ID',
  shape_type VARCHAR(50) NOT NULL COMMENT '选中的图形类型标识',
  create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '选中时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='选中图形记录表';

如果需要关联用户、画布ID等其他维度,直接在表中新增对应字段即可。

后端对接MySQL的写入示例(以Node.js的mysql2依赖为例):

const mysql = require('mysql2/promise');
// 初始化数据库连接池
const pool = mysql.createPool({
  host: '数据库Host地址',
  user: '数据库用户名',
  password: '数据库密码',
  database: '你的业务库名'
});

// 数据写入方法
async function saveToMysql(shapeType) {
  const [result] = await pool.execute(
    'INSERT INTO selected_shapes (shape_type) VALUES (?)',
    [shapeType]
  );
  return { code: 200, msg: '保存成功', insertId: result.insertId };
}

注意事项

  • 批量选中多个图形时,可将所有选中的图形类型拼成数组传给后端,用批量插入SQL写入数据库减少连接开销
  • 生产环境需要给接口添加鉴权逻辑,避免未授权请求恶意写入数据
  • 建议后端新增图形类型枚举校验,只有预设的合法标识才允许写入,避免脏数据入库

内容的提问来源于stack exchange,提问作者MariLuz Ramírez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:57:01