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

如何在特定路由无对应记录时返回JSON格式错误信息?

问题:查询不存在的ID时无法返回指定格式的错误JSON

我正在构建一个用于数据提交与插入的API,支持向POST端点提交数据、从数据库获取全部数据,还能通过ID查询特定行的单条数据。我希望当查询不存在的ID时,返回如下格式的JSON错误信息:

[
    {
        "error": "no record found in DB"
    }
]

以下是我当前使用的代码:

app.get('/users/:id',async(req,res)=>{
    try {
        const id = req.params.id
        
        conn = await pool.getConnection()
        const result = await conn.query("select * from info where id=?",id)
        if(!result){
            res.json({
                "error":"no such record in database"
            })
        }else{
            res.send(result)
        }
        
    } catch (error) {
        res.send(error)
    }
})

我尝试通过if语句判断查询无结果时执行错误返回逻辑,但实际返回的是空JSON。


解决方案

问题原因

多数数据库驱动(如mysql2)执行SELECT查询后,即便没有匹配数据,返回的result也是空数组而非null或undefined,所以原代码中!result的判断永远不会触发,直接返回了空数组(即空JSON)。

修改后的代码

app.get('/users/:id', async(req, res) => {
    let conn;
    try {
        const id = req.params.id
        
        conn = await pool.getConnection()
        // 部分数据库驱动要求查询参数以数组形式传入
        const result = await conn.query("select * from info where id=?", [id])
        
        if(result.length === 0){
            // 返回指定格式的错误信息,并设置404状态码
            res.status(404).json([
                {
                    "error": "no record found in DB"
                }
            ])
        }else{
            res.send(result)
        }
        
    } catch (error) {
        // 统一错误返回格式,设置500状态码
        res.status(500).json([{"error": error.message}])
    } finally {
        // 无论请求成功或失败,都释放数据库连接,避免连接池耗尽
        if(conn) conn.release()
    }
})

关键修改点

  1. 判断条件修正:用result.length === 0替代!result,准确识别无匹配数据的情况
  2. 错误格式对齐:返回要求的数组结构错误信息,同时设置符合REST规范的404状态码
  3. 参数传递修正:将查询参数放入数组[id],适配多数数据库驱动的参数绑定要求
  4. 连接泄漏修复:添加finally块确保数据库连接被释放,避免连接池耗尽
  5. 异常处理优化:统一异常返回格式,设置500状态码

内容的提问来源于stack exchange,提问作者denis kiplangat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:19:55