proxy.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { NextResponse } from 'next/server'
  2. import type { NextRequest } from 'next/server'
  3. import {handleCurrency} from "./proxy/currency";
  4. import {handleAuth} from "./proxy/auth";
  5. import { pathRewrite } from "./proxy/pathRewrite";
  6. import { currencyCookieOptions } from "@/utils/constants/server";
  7. export async function proxy(request: NextRequest) {
  8. // 找出缺失的默认 Cookie
  9. const missingCookies = handleCurrency(request);
  10. // 补齐当前请求缺失的 Cookie
  11. for (const cookie of missingCookies) {
  12. request.cookies.set(cookie.name, cookie.value);
  13. }
  14. // 将修改后的请求头转发给 Server Components
  15. let response = NextResponse.next({
  16. request: {
  17. headers: request.headers,
  18. },
  19. });
  20. // 将默认 Cookie 写入浏览器
  21. for (const cookie of missingCookies) {
  22. response.cookies.set(
  23. cookie.name,
  24. cookie.value,
  25. currencyCookieOptions,
  26. );
  27. }
  28. // 处理 URL 重写
  29. response = pathRewrite(request, response);
  30. // 处理认证与重定向
  31. response = await handleAuth(request, response);
  32. return response;
  33. }
  34. export const config = {
  35. matcher:[
  36. // 匹配到的不经过proxy.ts处理
  37. "/((?!_next|api|.*\\.(?:svg|png|jpg|jpeg|gif|webp|ico|css|js|map|woff|woff2|ttf|eot)$).*)",
  38. ]
  39. };