Skip to content

❤ Node20-角色管理增删改查接口

1、角色表的创建

接下来我们新建一个角色表 sys_role,实现对于角色部分的管理功能接口

角色表用于存储系统角色的相关信息。

角色表包括了角色的ID、名称、权限字符串、显示顺序、数据范围、菜单选择项关联显示、部门选择项关联显示、角色状态、删除标志、创建者、创建时间、更新者、更新时间和备注等字段

接下来我们就根据角色的功能我们创建一个对应的 SQL 数据表

该表使用InnoDB引擎,字符集为utf8mb4,排序规则为utf8mb4_0900_ai_ci。

javascript
CREATE TABLE `sys_role`  (
  `role_id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色ID',
  `role_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '角色名称',
  `role_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '角色权限字符串',
  `role_sort` int NOT NULL COMMENT '显示顺序',
  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '角色状态(0正常 1停用)',
  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
  `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`role_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '角色信息表' ROW_FORMAT = Dynamic;

接下来我们先插入两个角色信息,然后方便我们功能的实现

javascript
INSERT INTO `sys_role` VALUES (1, '超级管理员', 'admin', 1, '1', 1, 1, '0', '0', 'admin', '2024-05-28 13:43:38', '', NULL, '超级管理员');
INSERT INTO `sys_role` VALUES (2, '普通角色', 'common', 2, '2', 1, 1, '0', '0', 'admin', '2024-05-28 13:43:38', '', NULL, '普通角色');

创建好之后的角色数据表是这样子的

实现角色管理功能其实跟我们实现用户管理的部分差不多

角色管理功能主要是我们在pc端用户进行登陆以后可以对于角色进行增删改查,然后可以通过角色对用户进行权限的统一管理和赋值

2、角色的搜索接口

接下来我们就参照用户的列表查询部分同样的去开发一个角色的查询列表,在这里我们也可以先试试数据库查询的条件是否可以用

javascript
SELECT * FROM sys_role

查找我们的角色是没有问题的

接下来把查询数据库的部分放进去我们的接口里面,然后进行优化和接口的处理

javascript
 // 查询角色列表
app.get('/roles', async (req, res) => {
    try {
        const connection = await pool.getConnection();
        const [rows] = await connection.query('SELECT * FROM sys_role');
        connection.release();
        res.json(rows);
    } catch (error) {
        res.status(500).json({ error: error.message });
    }
});

验证一下我们的查询接口 ,角色的查询没问题

3、角色增加接口

接下来尝试一下我们的添加功能,我们先来做一个简单的角色增加

先来试试我们的数据库插入语言,看是否正确

javascript
INSERT INTO `sys_role` VALUES (2, '普通角色', '111', 2, '2', 1, 1, '0', '0', 'admin', '2024-05-28 13:43:38', '', NULL, '普通角色');

执行结束以后可以看出,我们的数据库之中的数据已经进行了相应的更改

接下来我们将数据库语言放入我们的语句之中

所以我们的新增接口就是:

javascript

// 添加角色
app.post('/roles', async (req, res) => {
    try {
        const roleData = req.body;
        const connection = await pool.getConnection();
        const [result] = await connection.query('INSERT INTO sys_role SET ?', roleData);
        connection.release();
        res.json({ message: 'Role added successfully', roleId: result.insertId });
    } catch (error) {
        res.status(500).json({ error: error.message });
    }
});

尝试一下我们的新增接口

缺少参数,我们再次进行一下优化

javascript
// 新增接口 dictData
router.post('/', (req, res) => {
  const { role_name, role_key, role_sort, status, create_by, create_time, remark } = req.body;
  const newdictData = {
   role_name, role_key, role_sort, status, create_by, create_time: new Date(), remark
  };
  console.log(newdictData,'newdictData');
  connectionPool.query('INSERT INTO sys_role SET ?', newdictData, (error, results, fields) => {
    if (error) {
        res.send({
            code: 500,
            data: results,
            message:'添加失败!'
        });
        return;
    } else {
        res.send({
            code: 200,
            data: results,
            message:'添加成功!'
        });
    }
  });
});

增加功能ok,并且能正确返回我们想要的东西

4、角色详情接口

角色详情,通过角色的id然后查到对应角色的内容

接下来我们简单写一个角色的详情

javascript
// 获取详情 3
app.get('/api/articles/:id', (req, res) => {
    // console.log(req.query,'req.query');
    const { id } = req.params;
    const values = [id];
    let query = 'SELECT * FROM articles WHERE id = ?';
    connectionpool.query(query, values, (err, results) => {
        if (err) {
            console.error('Error querying database:', err);
            res.status(500).json({ error: 'Internal server error' });
            return;
        }
        res.json({
            code: '200',
            data: results ? results[0] : {},
        });
    });
});

简单测试一下,详情接口没问题,这里详情我们采用的也是通过ID的方式进行获取的,还有另外一种方式就是当我们的列表存在数据的时候,我们可以直接利用列表的数据直接渲染到表单上,而不需要额外的去再次调用接口!

5、角色修改接口

接下来我们完善一下我们的角色修改接口:

javascript
// 更新角色信息
app.put('/roles/:roleId', async (req, res) => {
    try {
        const roleId = req.params.roleId;
        const roleData = req.body;
        const connection = await pool.getConnection();
        const [result] = await connection.query('UPDATE sys_role SET ? WHERE role_id = ?', [roleData, roleId]);
        connection.release();
        res.json({ message: 'Role updated successfully' });
    } catch (error) {
        res.status(500).json({ error: error.message });
    }
});

测试一下角色修改接口

javascript
const sql = "UPDATE user sys_role title = ?, author = ? WHERE id = ?";

修改接口没问题

5、角色删除接口

删除部分参照我们的用户部分进行更改

javascript

// 删除角色
app.delete('/roles/:roleId', async (req, res) => {
    try {
        const roleId = req.params.roleId;
        const connection = await pool.getConnection();
        const [result] = await connection.query('DELETE FROM sys_role WHERE role_id = ?', roleId);
        connection.release();
        res.json({ message: 'Role deleted successfully' });
    } catch (error) {
        res.status(500).json({ error: error.message });
    }
});

点击删除按钮测试一下我们的接口

测试可以发现,我们的删除功能已经好了!

Released under the MIT License.