next.js TRPC句柄TRPCError

fcwjkofz  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(42)

我正在用next js和trpc做一个应用程序,当我用trpc和trpc查询一个错误发生的原因时,客户端没有收到错误。
我的页面:

"use client"

import { useRouter, useSearchParams } from "next/navigation";
import { trpc } from "../_trpc/client";
import { Loader2 } from "lucide-react";
    
const Page = () => {

    const router = useRouter()
    const searchParams = useSearchParams()
    const origin = searchParams.get("origin")

    const { data: user, isLoading, isSuccess, error } = trpc.authCallback.useQuery(undefined, {
        retry: true,
        retryDelay: 500
    })

    console.log(error) // always returns null

    return (
        <div className="w-full mt-24 flex justify-center">
            <div className="flex flex-col items-center gap-2">
                <Loader2 className="h-8 w-8 animate-spin text-zinc-800" />
                <h3 className="font-semibold text-xl">
                    Setting up your account...
                </h3>
                <p>
                    You will be redirected automaticly
                </p>
            </div>
        </div>
    );
}

export default Page;

字符串
TRPC代码:

import { createDbUser, getDbUser, getKindeUser } from '@/services/auth';
    import { publicProcedure, router } from './trpc';
    import { TRPCError } from '@trpc/server'
    import { getKindeServerSession } from '@kinde-oss/kinde-auth-nextjs/server';
    import { db } from '@/db';
    
    export
      const appRouter = router({
        // query to get data
        // mutation to modify data
    
        authCallback: publicProcedure.query(async () => {
/// ...
            throw new TRPCError({ code: 'UNAUTHORIZED' }) // throw this error to handle it on my page.tsx

/// ...
          return { success: true }
        })
      });
    
    // Export type router type signature,
    // NOT the router itself.
    export type AppRouter = typeof appRouter;


有谁知道为什么我在客户端没有收到错误?我已经尝试了onError,但似乎这个功能在新的trpc更新中被删除了。
当我在浏览器上调用这个“http://localhost:3000/api/trpc/call-back”时,我确实看到了错误。所以错误正在发送,但它没有到达客户端??

sczxawaw

sczxawaw1#

如果我的想法是正确的,你和我正在练习同一个项目,我遇到了同样的问题。
如果你有一个HTTP-405,那么你必须改变你导出的常量处理程序为->

import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
    import { appRouter } from '@/trpc';
    import { NextRequest } from "next/server";
    
    const handler = (req: NextRequest) => fetchRequestHandler({
        endpoint: '/api/trpc',
        req,
        router: appRouter,
        createContext: () => ({}),
    });
    
    export { handler as GET, handler as POST }

字符串

9wbgstp7

9wbgstp72#

1.还要考虑将这些行添加到.gitignore文件中

.env*.local
    .env
    .env.local
    .env.staging

字符串
这是因为使您的PrismaDB凭据立即无效,如果您注意到,您总是收到来自PlanetscaleDB的电子邮件,说它已被无效,所以如果是这种情况;
1.为PrismaDB创建新凭据并将更改推送到数据库

npx prisma db push


1.在转到/auth-callback路由之前在localhost上登录到服务器,因为此时没有现有用户可供使用。

相关问题