node.js连接mysql写接口(一)

目录

一、基础增删改查

1.1、项目准备

1.2、创建user_info表

1.3、查询用户(getList)

1.4、添加用户(addUser)

1.5、修改用户(updateUser)

1.6、删除用户(deleteUser)

1.7、数据库基础语法扩展

首先:

1、数据库管理工具:Navicat 或者SQLyog都可以

2、建立项目:这里可以直接借助 HBuilderX.exe 创建一个Node项目或者Express项目

3、测试接口工具:Apifox 或者postman都可以

以上软件自行下载

一、基础增删改查

1.1、项目准备

在创建好的项目下直接npm i mysql

在app.js里面

javascript 复制代码
var app = express();
app.listen(2323,()=>console.log('服务已启动在2323端口'))

在routes文件夹里的index.js

javascript 复制代码
const mysql = require("mysql");
const conn = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "123456",
  port: 3307,
  database: "my-school", //自己本地建的数据库名,node app.js成功后返回null,说明链接成功
});
conn.connect((err) => {
  if (err) {
    console.error("数据库连接失败: ", err);
    return;
  }
  console.log("数据库连接成功");
});

启动项目:node app.js

希望热更新:npm install -g nodemon

将配置文件改成

javascript 复制代码
  "scripts": {
    "start": "nodemon ./bin/www"
  },

1.2、创建user_info表

sql 复制代码
CREATE TABLE user_info (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    selfName VARCHAR(50) NOT NULL COMMENT '姓名',
    PASSWORD VARCHAR(50) NOT NULL COMMENT '密码',
    money DECIMAL(18,2) NOT NULL COMMENT '金额',
    userId VARCHAR(36) NOT NULL UNIQUE COMMENT '用户ID',
    sex ENUM('F', 'M') NOT NULL COMMENT '性别',
    company VARCHAR(100) NOT NULL COMMENT '公司',
    job VARCHAR(50) NOT NULL COMMENT '职位',
    createdTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
);

sql语法解释

  • AUTO_INCREMENT 属性表示每当有新记录插入表中时,该列的值会自动增加。

  • PRIMARY KEY 表示这是一个主键,意味着每行的这个值都是唯一的,并且索引会建立在这个列上以优化查询性能,一般和AUTO_INCREMENT连用

  • COMMENT 'XX' 是对该列的注释。

  • NOT NULL 约束表示这个列不能包含 NULL 值。

  • **UNIQUE**约束表示这个列的所有值都必须是唯一的,即不允许有重复的 user_id。

  • 可变长字符串(VARCHAR),数字是最大长度。

  • money 列,数据类型为定点数(DECIMAL),总共18位数字,其中2位是小数部分。

  • sex 列,数据类型为枚举(ENUM),只能包含两个值:'F' 或 'M'。

  • createdTime列,数据类型为时间戳(TIMESTAMP),默认值为当前时间戳(CURRENT_TIMESTAMP)。

1.3、查询用户(getList)

javascript 复制代码
// 访问 http://localhost:2323/getList 即可拿到数据
router.get("/getList", (req, res) => {
  let sql = "select * from user_info";
  conn.query(sql, (err, result) => {
    if (err) {
      console.error("查询失败: ", err);
      res.json({ code: 500, data: null, msg: err.message });
      return;
    }
    res.json({ code: 200, data: result, msg: "成功" });
  });
});

1.4、添加用户(addUser)

效果展示

核心代码interface.js

javascript 复制代码
const addUser = (conn, req, res) => {
  const params = req.body;
  console.log(params, "params");
  const ret = {};
  if (params.selfName == "") {
    ret.code = 501;
    ret.data = null;
    ret.msg = "请输入用户名";
    res.json(ret);
    return;
  } else if (params.password == "") {
    ret.code = 501;
    ret.data = null;
    ret.msg = "请输入密码";
    res.json(ret);
    return;
  } else {
    conn.query(
      `INSERT INTO userlist(selfName,password,money,userId,sex,company,job) VALUES('${
        params.selfName
      }','${params.password}',
      '${params.money}','${randomId()}','${params.sex}','${params.company}','${
        params.job
      }')`,
      function (err, results, fields) {
        if (err) {
          ret.code = 500;
          ret.data = null;
          ret.msg = err.sqlMessage;
        } else if (results.length === 0) {
          ret.code = 501;
          ret.msg = "请传递正确的参数";
        } else {
          ret.code = 200;
          ret.data = null;
          ret.msg = "添加成功";
        }
        res.json(ret);
      }
    );
  }
};
const randomId = function uuid() {
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
    var r = (Math.random() * 16) | 0,
      v = c == "x" ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
};
exports.addUser = addUser;

在routes文件夹里的index.js

javascript 复制代码
var interface = require("./interface");
//添加用户接口
router.post("/addUser", (req, res) => {
  interface.addUser(conn, req, res);
});

数据库手动插入一条数据:

sql 复制代码
INSERT INTO user_info (selfName, PASSWORD, money, userId, sex, company, job)
VALUES 
('AA', '123456', 634452.00, 'c10f5828-af92-4cff-a7e1-0b6ef53b2c8c8', 'F', 'XX集团', '经理');

增加数据,请求发送成功后,报错Data too long for column 'userId' at row 1,可以将数据库原有长度36改成255

sql 复制代码
ALTER TABLE user_info MODIFY COLUMN userId VARCHAR(255);

1.5、修改用户(updateUser)

效果展示

核心代码interface.js

sql 复制代码
const updateUser = (conn, req, res) => {
  const params = req.body;
  console.log(params, "修改信息");
  const ret = {};
  if (params.selfName == "") {
    ret.code = 501;
    ret.data = null;
    ret.msg = "用户名不能为空";
    res.json(ret);
    return;
  } else if (params.password == "") {
    ret.code = 501;
    ret.data = null;
    ret.msg = "密码不能为空";
    res.json(ret);
    return;
  } else if (params.userId == "") {
    ret.code = 501;
    ret.data = null;
    ret.msg = "用户ID不能为空";
    res.json(ret);
    return;
  } else {
    conn.query(
      `UPDATE user_info SET selfName='${params.selfName}',password='${params.password}'
      ,money='${params.money}'
      ,sex='${params.sex}'
      ,company='${params.company}'
      ,job='${params.job}' WHERE userId='${params.userId}'`,
      function (err, results, fields) {
        if (err) {
          ret.code = 500;
          ret.data = null;
          ret.msg = err.sqlMessage;
        } else if (results.length === 0) {
          ret.code = 501;
          ret.msg = "请传递正确的参数";
        } else {
          ret.code = 200;
          ret.data = null;
          ret.msg = "更新成功";
        }
        res.json(ret);
      }
    );
  }
};
exports.updateUser = updateUser;

在routes文件夹里的index.js

javascript 复制代码
// 修改用户接口
router.post("/updateUser", (req, res) => {
  interface.updateUser(conn, req, res);
});

数据库手动修改该条数据【根据userId】:

sql 复制代码
UPDATE user_info
SET selfName = 'AAupdate', company = 'XX集团update'
WHERE userId IN ('eff7f9b01-8e59-46ba-a4fdb-9294a29e3e79', 'another-userid-value');

1.6、删除用户(deleteUser)

效果展示

核心代码interface.js

javascript 复制代码
const deleteUser = (conn, req, res) => {
  const params = req.body;
  console.log(params, "删除信息");
  const ret = {};
  if (params.userId == "") {
    ret.code = 501;
    ret.data = null;
    ret.msg = "请传递用户id";
    res.json(ret);
    return;
  } else {
    conn.query(
      "DELETE FROM user_info where userId=?",
      [params.userId],
      function (err, result) {
        if (err) {
          ret.code = 500;
          ret.data = null;
          ret.msg = err.sqlMessage;
        } else {
          ret.code = 200;
          ret.data = null;
          ret.msg = "删除成功";
        }
        res.json(ret);
      }
    );
  }
};
exports.deleteUser = deleteUser;

在routes文件夹里的index.js

javascript 复制代码
// 删除用户接口
router.post("/deleteUser", (req, res) => {
  interface.deleteUser(conn, req, res);
});

数据库手动删除该条数据【仅需要userId】:

sql 复制代码
DELETE FROM user_info WHERE userId='e0399a97-2956-4c3a-b19d-13f3bbc12c8d'

1.7、数据库基础语法扩展

增删改:

查询方法比较多样化

相关推荐
IvorySQL6 分钟前
PostgreSQL 技术日报 (3月5日)|规划器控制力升级,内核能力再进阶
数据库·postgresql·开源
武子康12 分钟前
大数据-241 离线数仓 - 实战:电商核心交易数据模型与 MySQL 源表设计(订单/商品/品类/店铺/支付)
大数据·后端·mysql
数据组小组14 小时前
免费数据库管理工具深度横评:NineData 社区版、Bytebase 社区版、Archery,2026 年开发者该选哪个?
数据库·测试·数据库管理工具·数据复制·迁移工具·ninedata社区版·naivicat平替
用户83071968408219 小时前
MySQL 查询优化 30 条封神技巧:用好索引,少耗资源,查询快到飞起
mysql
Nyarlathotep011320 小时前
事务隔离级别
sql·mysql
悟空聊架构20 小时前
基于KaiwuDB在游乐场“刷卡+投币”双模消费系统中的落地实践
数据库·后端·架构
IvorySQL21 小时前
PostgreSQL 技术日报 (3月4日)|硬核干货 + 内核暗流一网打尽
数据库·postgresql·开源
Nyarlathotep01131 天前
SQL的事务控制
sql·mysql
进击的丸子1 天前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端
用户86178277365181 天前
MySQL 8.0从库宕机排查实录:中继日志膨胀引发的连锁故障复盘
mysql