我正试图将Prisma与tRPC作为后端进行集成。它们都能正常工作,但是一旦我试图将它们集成在一起,就会引发错误。
这是我得到的错误消息:
"/Users/nils/Code/nextjs-coespace/node_modules/.prisma/client/index“:从外部模块TS4058返回已使用或正在使用名称‘TS4058’的导出函数类型,但不能命名
我从Prisma客户那里得到的文件:
// 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控制器:
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()
},
});
}发布于 2022-08-08 07:00:55
我想这和这很相似
我有一个类似的问题,我通过显示语句来解决这个问题。
发布于 2022-09-12 15:21:18
您将返回一个从解析中封装promise的prisma,这意味着prisma是返回类型的一部分,从而导致错误消息。如果您仔细考虑,错误信息是有意义的。
解决方案是显式地await结果,这会导致prisma不在解决方案中。当然,您仍然返回一个承诺,但是await阻止prisma与export type LocationRouter = typeof locationRouter一起导出。如果您在resolve上悬停,您将看到签名是
(property) resolve: ProcedureResolver<unknown, undefined, trpc.InferLast<Promise<template[]> & {
[prisma]: true;
}>>以下是修复我的错误(可能是您的错误):
.query("findMany", {
resolve: async () => {
return await prisma.location.findMany()
},
})在等待的情况下,resolve的签名现在
(property) resolve: ProcedureResolver<unknown, undefined, template[]>对于每个使用resolve的prisma,您都需要这样做。
https://stackoverflow.com/questions/73266267
复制相似问题