Skip to content

❤ Node17-字典类型和字典数据接口

1、字典类型接口的搭建

(1)字典类型接口查询

根据字典表格,我们先来简单的写一个字典值接口的增删改查

javascript
// 获取所有字典数据
app.get('/dictTypes', (req, res) => {
  connection.query('SELECT * FROM sys_dict_type', (error, results, fields) => {
    if (error) throw error;
    res.json(results);
  });
});

(2)字典类型接口增加

javascript

// 创建字典数据
app.post('/dictType', (req, res) => {
  const { dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark } = req.body;
  const newDictType = {
    dict_name,
    dict_type,
    status,
    create_by,
    create_time,
    update_by,
    update_time,
    remark
  };
  
  connection.query('INSERT INTO sys_dict_type SET ?', newDictType, (error, results, fields) => {
    if (error) throw error;
    res.json({ message: 'New dict type added successfully' });
  });
});

(3)字典类型接口修改

javascript
// 更新字典数据
app.put('/dictType/:id', (req, res) => {
  const { dict_name, dict_type, status, update_by, update_time, remark } = req.body;
  const updatedDictType = {
    dict_name,
    dict_type,
    status,
    update_by,
    update_time,
    remark
  };
  
  connection.query('UPDATE sys_dict_type SET ? WHERE dict_id = ?', [updatedDictType, req.params.id], (error, results, fields) => {
    if (error) throw error;
    res.json({ message: 'Dict type updated successfully' });
  });
});

(4)字典类型接口删除

javascript
// 删除字典数据
app.delete('/dictType/:id', (req, res) => {
  connection.query('DELETE FROM sys_dict_type WHERE dict_id = ?', req.params.id, (error, results, fields) => {
    if (error) throw error;
    res.json({ message: 'Dict type deleted successfully' });
  });
});

字典表搭建完成以后可以帮助我们对于用户的自定义字典值进行管理,接下来就是利用用户自定义的值控制字典数据部分!

2、字典数据接口的搭建

接下来我们进行字典数据接口的搭建

字典数据是依靠字典值从而查询出来的,所以在接口的处理上要以字典数据为主

(1)字典数据接口查询

接下来我们简单的写一下字典数据接口的增删改查

查看一下我们的sql查询

javascript
// 查询接口

app.get('/dict_data', (req, res) => {
  connectionPool.query('SELECT * FROM sys_dict_data', (error, results) => {
    if (error) {
      res.status(500).json({ error: error.message });
    } else {
      res.json(results);
    }
  });
});

(2)字典数据接口增加

javascript

// 新增接口
app.post('/dict_data', (req, res) => {
  const data = req.body;
  connectionPool.query('INSERT INTO sys_dict_data SET ?', data, (error, results) => {
    if (error) {
      res.status(500).json({ error: error.message });
    } else {
      res.json({ message: 'Data inserted successfully' });
    }
  });
});

(3)字典数据接口修改

javascript
// 更新字典数据数据
app.put('/dict_data/:id', (req, res) => {
  const { id } = req.params;
  const data = req.body;
  connectionPool.query('UPDATE sys_dict_data SET ? WHERE dict_code = ?', [data, id], (error, results) => {
    if (error) {
      res.status(500).json({ error: error.message });
    } else {
      res.json({ message: 'Data updated successfully' });
    }
  });
});

(4)字典数据接口删除

javascript
// 删除字典数据
app.delete('/dict_data/:id', (req, res) => {
  const { id } = req.params;
  connectionPool.query('DELETE FROM sys_dict_data WHERE dict_code = ?', id, (error, results) => {
    if (error) {
      res.status(500).json({ error: error.message });
    } else {
      res.json({ message: 'Data deleted successfully' });
    }
  });
});

字典表搭建完成以后可以帮助我们对于用户的自定义字典值进行管理,接下来就是利用用户自定义的值控制字典数据部分!

3、接口的优化和处理

简单的接口部分我们就搭建完成了,但是接下来我们还需要对于其中的接口进行完善和优化】

接口反馈优化

上面的接口虽然正常返回了数据,但是在返回过程中却没有给我们返回正确的状态码和提示,所以我们优化一下

javascript
//优化以前的接口展示
connection.query('SELECT * FROM sys_dict_type', (error, results, fields) => {
    if (error) throw error;
    res.json(results);
});


//优化以后的接口展示
router.get('/', (req, res) => {
  connectionPool.query('SELECT * FROM sys_dict_type', (error, results, fields) => {
     if (error) {
      res.send({
          code: 500,
          message:'查询失败!',
      });
      res.status(500).json({ error: error.message });
    } else {
      res.send({
          code: 200,
          data: results,
          message:'查询成功!',
      });
    }
  });
});

添加详情接口

上面的接口虽然我们正常功能全部好了,但是正常使用中很多数据是不想让用户看到的,所以我们写一个详情接口

详情就是向后面添加id的方式,当然这里我们可以将参数放到req.params以及req.body之中都是可以的,只要前后协商一致,放到哪里只要能拿到参数均可

javascript
// 获取详情 
router.get('/:id', (req, res) => {
    console.log(req,'req');
    const { id } = req.params;
    const values = [id];
    let query = 'SELECT * FROM  sys_dict_type WHERE dict_id = ?';
    connectionPool.query(query, values, (err, results) => {
        // console.log(err,'err');
        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] : {},
        });
    });
});

添加状态接口

需求:需要一部分用户可以更改状态是否可以使用,但是这部分用户却不能自己对于已经存在的参数进行修改,只能由管理员进行更改,那么如何操作呢?

这个时候我们额外添加的一个状态接口就起了很大的作用

新增一个管理状态的接口

javascript
//  禁用和使用,用于更改状态
router.put('/status/:id', (req, res) => {
    console.log(req.params,'req.params');
    console.log(req.body,'req.body');
    const dict_id = parseInt(req.params.id);
    const status = req.body.state;

    const query = 'UPDATE sys_dict_type SET status = ? WHERE dict_id = ?';
    connectionPool.query(query, [status, dict_id], (error, results, fields) => {
        if (error) {
            console.log(err,'err');
            console.log(results,'results');
            res.status(500).json({ error: 'Internal server error' });
            return;
        } else {
             res.json({
                code: 200,
                data: results,
            });
        }
    });
});

添加筛查条件

接下来优化一下我们的搜索接口,分别为接口之中增加筛查条件,我们以字典类型接口为例子

先进行解构取值

javascript
const { dict_name, dict_type, pageNum, pageSize } = req.query;

从其中拿到条件并进行筛选

javascript
// 字典名称
    if (dict_name !== undefined && dict_name !== '' && dict_name !== null) {
        query += ' WHERE dict_name = ?';
        params.push(dict_name);
}
// 字典类型
if (dict_type !== undefined && dict_type !== '' && dict_type !== null) {
    query += params.length ? ' AND' : ' WHERE';
    query += ' dict_type = ?';
    params.push(dict_type);
}

添加分页和限制,这样子在大数据的时候可以优化我们的接口以及每次查询从头开始

javascript
if (pageNum !== undefined && pageSize !== '' && pageSize !== null) {
        query += ' LIMIT ?, ?';
        let offset = (pageNum - 1) * pageSize;
        params.push(offset);

        params.push(parseInt(pageSize));
 }

把条件加入数据库中

javascript
  connectionPool.query(query,params,(error, results, fields) => {
    if (error) {
      res.status(500).json({ error: error.message });
    } 
  });

到这里我们的字典类型接口和字典数据的接口已经搭建好啦!

Released under the MIT License.