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

UUID类型userId查询异常:Postman变量/JS请求失败问题排查

问题原因与解决方案

引号引发错误的原因

PostgreSQL的uuid类型要求输入值是不带额外引号的标准UUID字符串(如11d6af03-20ac-4f04-a21c-28ec418a2c18)。当参数值带上单引号时(如'11d6af03-20ac-4f04-a21c-28ec418a2c18'),整个字符串会被当作一个整体,不符合UUID的格式规则,因此触发22P02(无效输入语法)错误。

另外你的SQL查询里用了userId::text = $1,把UUID类型转成文本比较,如果$1的值带引号,就会和数据库中存储的纯UUID文本不匹配,导致返回空数组或404。

解决方案

1. 修正SQL查询逻辑

没必要将UUID转成文本比较,直接用UUID类型匹配,PostgreSQL会自动将格式正确的字符串参数转换为UUID类型,同时提升查询效率:

// 修改后的查询语句
await pool.query('SELECT cat_name FROM category WHERE userID = $1;', [userId], (error, result) => {
    if (error) {
        throw error
    };
    response.status(200).json(result.rows);
})

2. 确保传递的参数无额外引号

  • Postman变量检查:查看你的Postman变量值,确保是纯UUID字符串,不要包含单引号或双引号。比如变量值应为11d6af03-20ac-4f04-a21c-28ec418a2c18,而非'11d6af03-20ac-4f04-a21c-28ec418a2c18'。
  • JavaScript请求修正:确保请求URL中的userId参数是不带引号的字符串。例如:
    const userId = '11d6af03-20ac-4f04-a21c-28ec418a2c18'; // 纯UUID字符串,无引号
    fetch(`http://localhost:8080/api/catDb/${userId}`)
      .then(res => res.json())
      .then(data => console.log(data));
    

3. 添加参数格式验证(可选)

在接口中加入UUID格式校验,提前拦截无效参数,避免数据库报错:

router.get('/:userId', async (request, response) => {
    const userId = request.params.userId;
    // 标准UUID正则校验
    const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
    
    if (!uuidRegex.test(userId)) {
        return response.status(400).json({ error: '无效的UUID格式' });
    }

    try{
        await pool.query('SELECT cat_name FROM category WHERE userID = $1;', [userId], (error, result) => {
            if (error) {
                throw error
            };
            response.status(200).json(result.rows);
        })
    }
    catch(error){
        console.log(error);
        response.status(500).json({ error: '服务器内部错误' });
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:57:20