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

如何实现HTML按钮调用Node.js删除MySQL表中当前登录用户记录

实现方案

浏览器端的HTML/JS和服务端Node.js是完全隔离的运行环境,没法直接跨环境调用函数,通过HTTP接口做前后端交互是标准实现方式,整体分3步落地:

第一步:Node.js侧编写删除用户的服务端接口

先安装必要依赖(如果还没装的话):
npm i express mysql2 cors

接口逻辑里绝对不能直接信任前端传来的用户ID,必须从服务端保存的登录态(Session、解析后的JWT)里取当前登录用户的标识,防止越权删除其他用户账号,参考代码如下:

const express = require('express');
const mysql = require('mysql2');
const cors = require('cors');
const app = express();
app.use(cors());
app.use(express.json());

// 初始化MySQL连接
const db = mysql.createConnection({
  host: '你的数据库地址',
  user: '你的数据库账号',
  password: '你的数据库密码',
  database: '你的业务库名'
});

// 登录态校验中间件,替换成你自己现有的鉴权逻辑即可
const authCheck = (req, res, next) => {
  // 比如从请求Cookie里读Session、解析Header里的JWT,校验失败直接返回401
  req.user = { id: 1 }; // 示例值,实际取校验通过的当前登录用户ID
  next();
};

// 注销账户接口
app.delete('/api/user/delete', authCheck, (req, res) => {
  const currentUserId = req.user.id;
  // 用?做参数占位,不要拼接SQL字符串,防止SQL注入
  const deleteSql = `DELETE FROM users WHERE id = ?`;
  db.query(deleteSql, [currentUserId], (err, result) => {
    if (err) {
      return res.status(500).json({ code: 500, msg: '服务异常,删除失败' });
    }
    if (result.affectedRows === 0) {
      return res.status(404).json({ code: 404, msg: '用户不存在' });
    }
    // 删除成功后记得作废当前登录凭证(清Session、把Token加入黑名单等)
    res.json({ code: 200, msg: '账户删除成功' });
  });
});

app.listen(3000, () => {
  console.log('服务运行在3000端口');
});

注意:SQL语句必须用上面示例的参数化占位写法,禁止直接把变量拼接到SQL字符串里,避免SQL注入风险。

第二步:HTML页面添加按钮和前端请求逻辑

页面里放置删除按钮,绑定点击事件,触发时给上面写好的Node.js接口发请求即可,用原生fetch实现不需要额外引入第三方库:

<!-- 删除账户按钮 -->
<button id="deleteAccountBtn">永久注销当前账户</button>

<script>
const deleteBtn = document.getElementById('deleteAccountBtn');
deleteBtn.addEventListener('click', async () => {
  // 加二次确认,防止用户误点
  const confirmRes = confirm('确定要永久删除账户吗?操作不可恢复!');
  if (!confirmRes) return;

  try {
    const res = await fetch('http://你的Node服务地址:3000/api/user/delete', {
      method: 'DELETE',
      // 如果用Cookie存登录态,必须加这行才能跨域带上凭证
      credentials: 'include'
    });
    const data = await res.json();
    if (data.code === 200) {
      alert('账户已注销,即将跳转到登录页');
      location.href = '/login.html';
    } else {
      alert(`删除失败:${data.msg}`);
    }
  } catch (err) {
    alert('网络异常,请稍后重试');
  }
});
</script>

必须注意的几个坑

  • 永远不要信任前端传参里的用户ID,所有涉及当前用户的操作,都要从服务端侧的登录态里取用户标识,否则攻击者改个请求参数就能删掉任意用户账号
  • 删除类高危操作一定要加二次确认,避免用户误触造成数据损失
  • 用户删除成功后必须立刻作废对应的登录凭证,防止出现账号删了但登录态还有效的异常情况

内容的提问来源于stack exchange,提问作者ask

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:06:21