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

Prisma Client查询返回空数组问题求助

问题排查:Prisma查询返回空数组

1. 确认数据库表是否存在数据

直接使用SQL Server管理工具执行以下查询,验证Scales表是否有数据:

SELECT * FROM [RiffTheoryScales].[dbo].[Scales];

如果查询结果为空,问题出在数据库无数据;如果有数据,继续排查。

2. 核对日志与当前请求的匹配性

你提供的日志中显示的查询语句带有WHERE [dbo].[Scales].[ID] = @P1,但控制器代码调用的是无过滤条件的prisma.scales.findMany(),说明这条日志不是当前测试请求产生的。建议在控制器中添加调试日志,确认实际执行的查询:

const getScaleByName = async (req, res) => {
    try {
        console.log("Starting findMany query for Scales");
        const scales = await prisma.scales.findMany()
        console.log("Query result:", scales)
        // 后续逻辑
    } catch (error) {
        // 错误处理
    }
}

重新发起请求后,查看日志是否输出不带WHERE条件的SELECT [dbo].[Scales].[ID], [dbo].[Scales].[name] FROM [dbo].[Scales],如果没有,说明请求未进入该控制器逻辑。

3. 修正空数据判断逻辑

findMany()在无匹配数据时返回空数组而非null,JavaScript中空数组的布尔值为true,因此当前的if (!scales)永远不会触发。需改为判断数组长度:

if (scales.length === 0) {
    res.status(400).json({
        success: false,
        message: 'No scales found!',
    });
} else {
    res.status(200).json({
        scales,
        success: true,
        message: 'All scales returned'
    })
}

4. 检查Prisma模型与数据库的映射一致性

  • 显式指定表名映射,避免自动映射异常:
    model Scales {
      ID                   Int     @id(map: "PK__Scales__3214EC27E22038C6") @default(autoincrement())
      name                 String  @db.NVarChar(100)
      @@map("Scales") // 明确绑定数据库表名
    }
    
  • 重新执行prisma db pull同步模型,再执行prisma generate更新Prisma Client,确保模型与数据库结构完全匹配。

5. 确保PrismaClient实例正确初始化

开发环境热重载可能导致重复实例化PrismaClient,改为单例模式避免异常:

import { PrismaClient } from '@prisma/client'

let prisma;

if (process.env.NODE_ENV === 'production') {
  prisma = new PrismaClient({
    log: ['query', 'info', 'warn', 'error'],
  });
} else {
  if (!global.prisma) {
    global.prisma = new PrismaClient({
      log: ['query', 'info', 'warn', 'error'],
    });
  }
  prisma = global.prisma;
}

// 服务器其他代码

export default prisma

6. 验证请求路径是否正确

你的路由配置为/api/scales/name,确保测试时使用的完整请求URL为:

GET http://localhost:3000/api/scales/name

路径错误会导致请求无法触发目标控制器逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:08:11