我遇到了一个似乎无法解决的问题。我可以解决此文件中的错误的唯一方法如下:
import { authMiddleware } from '@clerk/nextjs/server';
import { NextResponse } from 'next/server';
export default authMiddleware(
(auth, req) => {
//rewrite for domains
const url = req.nextUrl;
const searchParams = url.searchParams.toString();
let hostname = req.headers;
const pathWithSearchParams = `${url.pathname}${searchParams.length > 0 ? `?${searchParams}` : ''}`;
//if subdomain exists
const customSubDomain = hostname.get('host')?.split(`${process.env.NEXT_PUBLIC_DOMAIN}`).filter(Boolean)[0];
if (customSubDomain) {
return NextResponse.rewrite(new URL(`/${customSubDomain}${pathWithSearchParams}`, req.url));
}
if (url.pathname === '/sign-in' || url.pathname === '/sign-up') {
return NextResponse.redirect(new URL(`/agency/sign-in`, req.url));
}
if ( url.pathname === '/' || (url.pathname === '/site' && url.host === process.env.NEXT_PUBLIC_DOMAIN)) {
return NextResponse.rewrite(new URL('/site', req.url));
}
if (url.pathname.startsWith('/agency') || url.pathname.startsWith('/subaccount')) {
return NextResponse.rewrite(new URL(`${pathWithSearchParams}`, req.url));
}
})
export const config = {
matcher: ['/((?!.+\\.[\\w]+$|_next).*)', '/', '/(api|trpc)(.*)'],
}
但是当我尝试使用 uploadthing dropbox 上传文件时,出现以下错误:
ℹ UPLOADTHING 9:06:21 AM UploadThing dev server is now running!
⨯ UPLOADTHING 9:06:21 AM [
⨯ UPLOADTHING 9:06:21 AM "An error occured in your middleware function",
⨯ UPLOADTHING 9:06:21 AM {
⨯ UPLOADTHING 9:06:21 AM "message": "Failed to run middleware",
⨯ UPLOADTHING 9:06:21 AM "_tag": "UploadThingError",
⨯ UPLOADTHING 9:06:21 AM "name": "UploadThingError",
⨯ UPLOADTHING 9:06:21 AM "code": "INTERNAL_SERVER_ERROR",
⨯ UPLOADTHING 9:06:21 AM "cause": {}
⨯ UPLOADTHING 9:06:21 AM }
⨯ UPLOADTHING 9:06:21 AM ]
⨯ UPLOADTHING 9:06:21 AM Failed to run middleware
有什么想法可以解决这个问题吗?我已经尝试了最新版本的 @clerk/nextjs 以及 clerkMiddleware,但我似乎无法解决这个问题。
我觉得我已经尝试了一切,请帮助我。 预先感谢!
首先,他们弃用了 authMiddleware,他们希望您使用 clerkMiddleware,正如他们在文档中所说:https://clerk.com/docs/references/nextjs/auth-middleware
还将您的逻辑包装到 try catch 块中,以便我们可以详细了解错误。 我可以建议您确保 req.headers 和 req.nextUrl 不为空或未定义,您可以使用 req.headers.get 来获取对象内的主机名,而不是引用标头对象。