首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在tRPC中使用Prisma时出错:从外部模块返回已或正在使用名称“prisma”的导出函数类型

在tRPC中使用Prisma时出错:从外部模块返回已或正在使用名称“prisma”的导出函数类型
EN

Stack Overflow用户
提问于 2022-08-07 09:22:32
回答 2查看 589关注 0票数 2

我正试图将Prisma与tRPC作为后端进行集成。它们都能正常工作,但是一旦我试图将它们集成在一起,就会引发错误。

这是我得到的错误消息:

"/Users/nils/Code/nextjs-coespace/node_modules/.prisma/client/index“:从外部模块TS4058返回已使用或正在使用名称‘TS4058’的导出函数类型,但不能命名

我从Prisma客户那里得到的文件:

代码语言:javascript
复制
// Note! This file has been copied from:
// https://github.com/prisma/prisma-examples/blob/latest/typescript/rest-nextjs-api-routes-auth/lib/prisma.ts

import { PrismaClient } from '@prisma/client';

// PrismaClient is attached to the `global` object in development to prevent
// exhausting your database connection limit.
//
// Learn more:
// https://pris.ly/d/help/next-js-best-practices

// eslint-disable-next-line import/no-mutable-exports
let prisma: PrismaClient;

if (process.env.NODE_ENV === 'production') {
  prisma = new PrismaClient();
} else {
  if (!global.prisma) {
    global.prisma = new PrismaClient();
  }
  prisma = global.prisma;
}

export default prisma;

我的tRPC控制器:

代码语言:javascript
复制
import createRouter from '@/src/lib/server/trpc/routers/router';
import prisma from '@/src/lib/server/prisma';
import { z } from 'zod';

export default function locationRouter() {
  return createRouter()
    .mutation('create', {
      input: z.object({
        id: z.string().uuid(),
        // ...
      }),
      resolve(req) {
        return prisma.location.create({
          data: req.input,
        });
      },
    })
    .query('findMany', {
      resolve() {
          return prisma.location.findMany()
      },
    });
}
EN

回答 2

Stack Overflow用户

发布于 2022-08-08 07:00:55

我想这和很相似

我有一个类似的问题,我通过显示语句来解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 2022-09-12 15:21:18

您将返回一个从解析中封装promiseprisma,这意味着prisma是返回类型的一部分,从而导致错误消息。如果您仔细考虑,错误信息是有意义的。

解决方案是显式地await结果,这会导致prisma不在解决方案中。当然,您仍然返回一个承诺,但是await阻止prismaexport type LocationRouter = typeof locationRouter一起导出。如果您在resolve上悬停,您将看到签名是

代码语言:javascript
复制
(property) resolve: ProcedureResolver<unknown, undefined, trpc.InferLast<Promise<template[]> & {
    [prisma]: true;
}>>

以下是修复我的错误(可能是您的错误):

代码语言:javascript
复制
  .query("findMany", {
    resolve: async () => {
      return await prisma.location.findMany()
    },
  })

在等待的情况下,resolve的签名现在

代码语言:javascript
复制
(property) resolve: ProcedureResolver<unknown, undefined, template[]>

对于每个使用resolveprisma,您都需要这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73266267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档