代码之家  ›  专栏  ›  技术社区  ›  ShyRell

Prisma客户端在查询时返回空数组

  •  0
  • ShyRell  · 技术社区  · 1 年前

    我正在建立我的后端项目,并已从Sequelize切换到Prisma,以实现更强大的查询。浏览Prisma的文档很难,但我觉得我已经涵盖了所有的基础。 基本上,我创建了生成器客户端和数据源数据库,并运行 prisma db pull 生成模型,然后运行 prisma generate 以更新prisma客户端。我的客户端启用了基本日志记录,验证它是否已连接到数据库。

    const prisma = new PrismaClient({
        log: ['query', 'info', 'warn', 'error'],
    })
    
    prisma:info Starting a mssql pool with 9 connections.
    prisma:info Performing a TLS handshake
    prisma:warn Trusting the server certificate without validation.
    prisma:info TLS handshake successful
    prisma:warn Turning TLS off after a login. All traffic from here on is not encrypted.
    prisma:info Database change from 'RiffTheoryScales' to 'master'
    prisma:info Changed database context to 'RiffTheoryScales'.
    prisma:info SQL collation changed to windows-1252
    prisma:info Microsoft SQL Server version 1443102736
    prisma:info Packet size change from '4096' to '4096'
    prisma:query SELECT [dbo].[Scales].[ID], [dbo].[Scales].[name]
    WHERE [dbo].[Scales].[ID] = @P1
    []
    

    我的服务器看起来像这样

    const prisma = new PrismaClient({
        log: ['query', 'info', 'warn', 'error'],
    })
    
    const app = express()
    app.use(cors());
    app.use(express.json())
    
    // ROUTES
    app.use('/api/scales', router);
    
    const server = app.listen(3000, () =>
        console.log(`RUNNING ON PORT 3000`),
    )
    
    export default prisma
    

    我的架构如下

    generator client {
      provider = "prisma-client-js"
    }
    
    datasource db {
      provider = "sqlserver"
      url      = env("DATABASE_URL")
    }
    
    model Scales {
      ID                   Int     @id(map: "PK__Scales__3214EC27E22038C6") @default(autoincrement())
      name                 String  @db.NVarChar(100)
    
    }
    

    我的基本测试路线如下

    import { Router } from "express" ;
    import getScaleByName from '../controllers/prismacontrol.js'
    
    const router = Router(); 
    
    router.get("/name", getScaleByName);
    
    export default router
    
    import prisma from "../servertwo.js";
    
    const getScaleByName = async (req, res) => {
        try {
            const scales = await prisma.scales.findMany()
            console.log(scales)
    
            if (!scales) {
                res.status(400).json({
                    success: false,
                    message: 'No scales found!',
                });
            } else {
                res.status(200).json({
                    scales,
                    success: true,
                    message: 'All scales returned'
                })
            }
        } catch (error) {
            console.log(error)
            res.status(400).json({
                success: false,
                message: `ERROR: ${error.message}`
            });
        }
    }
    
    
    export default getScaleByName
    

    我以为我已经涵盖了所有的基础,但如果有人看到遗漏或编码建议,请指出。甚至可能是一些简单的事情。。。

    1 回复  |  直到 1 年前
        1
  •  0
  •   Kobra    1 年前

    我不明白你想要什么,所以我来回答两个问题。

    1. 如果你的问题是空数组要去的路由 status 200 ,您只需要更改 if(!scales) if(scales.length === 0) ,因为在Javascript中,空数组被视为现有数组,因此它将返回 true ,就像一个空物体。

    2. 如果问题是它返回了一个空数组,而不是返回表的所有行,那么我能看到的唯一问题是没有填充您的DB,或者 connection string 是错误的。

    对于最后一种情况,请尝试使用 npx prisma studio 检查Prisma是否正在渲染所有数据

    同时检查是否 env 正在中读取 schema

    推荐文章