前言
上一篇文章中,使用 node + koa2 + koa-router ,编辑了一个简单的接口,后台服务中肯定是少不了对数据库的操作,增删改查啥的,这篇文章主要是介绍,如何使用 node 连接并操作 mysql 数据库
步骤
-
yarn add mysql 安装 mysql
yarn add mysql
- 使用 npm 也可以 npm install mysql
-
server 目录下新建 config 文件夹并新建 default.js 文件,插入下列内容
const config = { // 启动端口 port: 3800, // 数据库配置 mysqlConfig: { HOST: "localhost", // 地址 PORT: "3306", // 端口 DATABASE: "test", // 数据库名 USERNAME: "root", // 用户名 PASSWORD: "root123", // 密码 }, }; module.exports = config;
-
server 目录下新建 lib 文件夹并新建 db.js 文件,插入下列内容
var mysql = require("mysql"); var config = require("../config/default.js"); // 创建连接池 var pool = mysql.createPool({ host: config.mysqlConfig.HOST, // 地址 port: config.mysqlConfig.PORT, // 端口 database: config.mysqlConfig.DATABASE, // 数据库名 user: config.mysqlConfig.USERNAME, // 用户名 password: config.mysqlConfig.PASSWORD, // 密码 }); exports.query = (sql, values) => { return new Promise((resolve, reject) => { // 获取连接 pool.getConnection((err, connection) => { if (err) { reject(err); } else { // 使用连接执行查询 connection.query(sql, values, (err, rows) => { if (err) { reject(err); } else { resolve(rows); } //连接不再使用,返回到连接池,释放当前连接 connection.release(); }); } }); }); };
-
lib 目录下新建 initMysql.js 文件,插入下列内容
var { query } = require("./db.js"); let tables = [ { name: "test", grammar: `create table if not exists test( id int primary key auto_increment, name VARCHAR(255) NOT NULL COMMENT '用户名', password VARCHAR(255) NOT NULL COMMENT '密码' );`, }, { name: "test2", grammar: `create table if not exists test2( id int primary key auto_increment, name VARCHAR(255) NOT NULL COMMENT '用户名', password VARCHAR(255) NOT NULL COMMENT '密码' );`, }, ]; // 循环遍历,创建表 for (let index = 0; index < tables.length; index++) { const element = tables[index]; // 判断表是否存在 query(`SHOW CREATE TABLE ${element.name}`, []) .then((res) => { return false; }) .catch((err) => { if (err.code == "ER_NO_SUCH_TABLE") { query(element.grammar, []); } }); }
- 具体内容根据个人需求做修改
-
node 运行 initMysql.js 文件初始化数据库
node .\lib\initMysql.js
-
查看数据库 test 新增表 test、test2 成功
-
查看表的字段,与初始化的数据无误
-
lib 目录下新建 sql.js 文件,插入下列内容
var { query } = require("./db.js"); // 创建数据 exports.test_insert = (value) => { let _sql = `INSERT INTO test SET name=?,password=?;`; return query(_sql, value); }; // 查询数据 exports.test_find = () => { let _sql = `SELECT * FROM test;`; return query(_sql); }; // 修改数据 exports.test_update = (value, id) => { let _sql = `UPDATE test SET name=?,password=? WHERE id=${id};`; return query(_sql, value); }; // 删除数据 exports.test_delete = (id) => { let _sql = `DELETE FROM test WHERE id="${id}";`; return query(_sql); };
- 具体内容根据个人需求做修改
-
server 目录下新建 utils 文件夹并新建 index.js 文件,插入下列内容
/** * @name isEmpty * @description 判空 * @param val * @return Boolean */ exports.isEmpty = (val) => { let flg = true; let type = Object.prototype.toString.call(val); switch (type) { case "[object String]": if (val.trim() === "") { flg = false; } break; case "[object Number]": if (val === 0 || val) { flg = true; } break; default: if (!val) { flg = false; } break; } };
-
修改 c-test.js 文件,插入下列内容
const userModel = require("../lib/sql.js"); const utils = require("../utils"); // 新增数据 exports.postTest = async (ctx) => { let { name, password } = ctx.query; let returnData = { code: null, message: "", }; // 判断是否空 if (utils.isEmpty(name) || utils.isEmpty(password)) { returnData = { code: 500, message: "请检查必填字段!", }; } else { await userModel .test_insert([name, password]) .then(() => { returnData = { code: 200, message: "插入数据成功!", }; }) .catch((err) => { returnData = { code: 500, err, message: "插入数据失败!", }; }); } ctx.body = returnData; }; // 查询数据 exports.getTest = async (ctx) => { let returnData = { code: null, message: "", }; await userModel .test_find() .then((res) => { returnData = { code: 200, res: { data: res, }, message: "成功!", }; }) .catch((err) => { returnData = { code: 500, err, message: "失败!", }; }); ctx.body = returnData; }; // 修改数据 exports.updateTest = async (ctx) => { let { name, password, id } = ctx.query; let returnData = { code: null, message: "", }; // 判断是否空 if (utils.isEmpty(name) || utils.isEmpty(password) || utils.isEmpty(id)) { returnData = { code: 500, message: "请检查必填字段!", }; } else { await userModel .test_update([name, password], id) .then(() => { returnData = { code: 200, message: "修改数据成功!", }; }) .catch((err) => { returnData = { code: 500, err, message: "修改数据失败!", }; }); } ctx.body = returnData; }; // 删除数据 exports.deleteTest = async (ctx) => { let { id } = ctx.query; let returnData = { code: null, message: "", }; // 判断是否空 if (utils.isEmpty(id)) { returnData = { code: 500, message: "请检查必填字段!", }; } else { await userModel .test_delete(id) .then(() => { returnData = { code: 200, message: "删除数据成功!", }; }) .catch((err) => { returnData = { code: 500, err, message: "删除数据失败!", }; }); } ctx.body = returnData; };
-
修改 r-test.js 文件,插入下列内容
const router = require("koa-router")(); const controller = require("../controller/c-test"); router.post("/test/post", controller.postTest); router.get("/test/get", controller.getTest); router.put("/test/update", controller.updateTest); router.delete("/test/delete", controller.deleteTest); module.exports = router;
-
测试新增接口
-
查看数据库,新增成功
-
测试查询接口,查询数据成功
-
测试修改接口
-
查看数据库,修改成功
-
测试删除接口
-
查看数据库,删除成功