From 4df244d3a365edc650eb7fdd62864e4beb696352 Mon Sep 17 00:00:00 2001 From: shinya Date: Mon, 18 Aug 2025 23:04:27 +0800 Subject: [PATCH] feat: unsupport edgeless --- Dockerfile | 6 ------ src/app/api/admin/category/route.ts | 2 +- src/app/api/admin/config/route.ts | 2 +- src/app/api/admin/reset/route.ts | 2 +- src/app/api/admin/site/route.ts | 2 +- src/app/api/admin/source/route.ts | 2 +- src/app/api/admin/user/route.ts | 2 +- src/app/api/change-password/route.ts | 2 +- src/app/api/cron/route.ts | 2 +- src/app/api/detail/route.ts | 2 +- src/app/api/douban/categories/route.ts | 2 +- src/app/api/douban/recommends/route.ts | 2 +- src/app/api/douban/route.ts | 2 +- src/app/api/favorites/route.ts | 2 +- src/app/api/image-proxy/route.ts | 2 +- src/app/api/login/route.ts | 2 +- src/app/api/logout/route.ts | 2 +- src/app/api/playrecords/route.ts | 2 +- src/app/api/register/route.ts | 2 +- src/app/api/search/one/route.ts | 2 +- src/app/api/search/resources/route.ts | 2 +- src/app/api/search/route.ts | 2 +- src/app/api/search/suggestions/route.ts | 2 +- src/app/api/search/ws/route.ts | 2 +- src/app/api/searchhistory/route.ts | 2 +- src/app/api/server-config/route.ts | 2 +- src/app/api/skipconfigs/route.ts | 2 +- src/app/layout.tsx | 1 + 28 files changed, 27 insertions(+), 32 deletions(-) diff --git a/Dockerfile b/Dockerfile index b4aea2d..63b9aea 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,14 +23,8 @@ COPY --from=deps /app/node_modules ./node_modules COPY . . # 在构建阶段也显式设置 DOCKER_ENV, -# 确保 Next.js 在编译时即选择 Node Runtime 而不是 Edge Runtime -RUN find ./src -type f -name "route.ts" -print0 \ - | xargs -0 sed -i "s/export const runtime = 'edge';/export const runtime = 'nodejs';/g" ENV DOCKER_ENV=true -# For Docker builds, force dynamic rendering to read runtime environment variables. -RUN sed -i "/const inter = Inter({ subsets: \['latin'] });/a export const dynamic = 'force-dynamic';" src/app/layout.tsx - # 生成生产构建 RUN pnpm run build diff --git a/src/app/api/admin/category/route.ts b/src/app/api/admin/category/route.ts index 044e6a5..6fc2226 100644 --- a/src/app/api/admin/category/route.ts +++ b/src/app/api/admin/category/route.ts @@ -6,7 +6,7 @@ import { getAuthInfoFromCookie } from '@/lib/auth'; import { getConfig } from '@/lib/config'; import { db } from '@/lib/db'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; // 支持的操作类型 type Action = 'add' | 'disable' | 'enable' | 'delete' | 'sort'; diff --git a/src/app/api/admin/config/route.ts b/src/app/api/admin/config/route.ts index f3632a6..7544700 100644 --- a/src/app/api/admin/config/route.ts +++ b/src/app/api/admin/config/route.ts @@ -6,7 +6,7 @@ import { AdminConfigResult } from '@/lib/admin.types'; import { getAuthInfoFromCookie } from '@/lib/auth'; import { getConfig } from '@/lib/config'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: NextRequest) { const storageType = process.env.NEXT_PUBLIC_STORAGE_TYPE || 'localstorage'; diff --git a/src/app/api/admin/reset/route.ts b/src/app/api/admin/reset/route.ts index e5c7914..7524160 100644 --- a/src/app/api/admin/reset/route.ts +++ b/src/app/api/admin/reset/route.ts @@ -5,7 +5,7 @@ import { NextRequest, NextResponse } from 'next/server'; import { getAuthInfoFromCookie } from '@/lib/auth'; import { resetConfig } from '@/lib/config'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: NextRequest) { const storageType = process.env.NEXT_PUBLIC_STORAGE_TYPE || 'localstorage'; diff --git a/src/app/api/admin/site/route.ts b/src/app/api/admin/site/route.ts index 1d7374c..b06539a 100644 --- a/src/app/api/admin/site/route.ts +++ b/src/app/api/admin/site/route.ts @@ -6,7 +6,7 @@ import { getAuthInfoFromCookie } from '@/lib/auth'; import { getConfig } from '@/lib/config'; import { db } from '@/lib/db'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function POST(request: NextRequest) { const storageType = process.env.NEXT_PUBLIC_STORAGE_TYPE || 'localstorage'; diff --git a/src/app/api/admin/source/route.ts b/src/app/api/admin/source/route.ts index 42f4e95..9f0bedb 100644 --- a/src/app/api/admin/source/route.ts +++ b/src/app/api/admin/source/route.ts @@ -6,7 +6,7 @@ import { getAuthInfoFromCookie } from '@/lib/auth'; import { getConfig } from '@/lib/config'; import { db } from '@/lib/db'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; // 支持的操作类型 type Action = 'add' | 'disable' | 'enable' | 'delete' | 'sort'; diff --git a/src/app/api/admin/user/route.ts b/src/app/api/admin/user/route.ts index c108c13..a926c16 100644 --- a/src/app/api/admin/user/route.ts +++ b/src/app/api/admin/user/route.ts @@ -6,7 +6,7 @@ import { getAuthInfoFromCookie } from '@/lib/auth'; import { getConfig } from '@/lib/config'; import { db } from '@/lib/db'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; // 支持的操作类型 const ACTIONS = [ diff --git a/src/app/api/change-password/route.ts b/src/app/api/change-password/route.ts index 8f2b58d..c9534f8 100644 --- a/src/app/api/change-password/route.ts +++ b/src/app/api/change-password/route.ts @@ -5,7 +5,7 @@ import { NextRequest, NextResponse } from 'next/server'; import { getAuthInfoFromCookie } from '@/lib/auth'; import { db } from '@/lib/db'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function POST(request: NextRequest) { const storageType = process.env.NEXT_PUBLIC_STORAGE_TYPE || 'localstorage'; diff --git a/src/app/api/cron/route.ts b/src/app/api/cron/route.ts index e41b7b1..f46a541 100644 --- a/src/app/api/cron/route.ts +++ b/src/app/api/cron/route.ts @@ -7,7 +7,7 @@ import { db } from '@/lib/db'; import { fetchVideoDetail } from '@/lib/fetchVideoDetail'; import { SearchResult } from '@/lib/types'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: NextRequest) { console.log(request.url); diff --git a/src/app/api/detail/route.ts b/src/app/api/detail/route.ts index 915229b..64c65aa 100644 --- a/src/app/api/detail/route.ts +++ b/src/app/api/detail/route.ts @@ -3,7 +3,7 @@ import { NextResponse } from 'next/server'; import { getAvailableApiSites, getCacheTime } from '@/lib/config'; import { getDetailFromApi } from '@/lib/downstream'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: Request) { const { searchParams } = new URL(request.url); diff --git a/src/app/api/douban/categories/route.ts b/src/app/api/douban/categories/route.ts index 4569ef3..3af8b6f 100644 --- a/src/app/api/douban/categories/route.ts +++ b/src/app/api/douban/categories/route.ts @@ -20,7 +20,7 @@ interface DoubanCategoryApiResponse { }>; } -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: Request) { const { searchParams } = new URL(request.url); diff --git a/src/app/api/douban/recommends/route.ts b/src/app/api/douban/recommends/route.ts index d7c8192..34f16c5 100644 --- a/src/app/api/douban/recommends/route.ts +++ b/src/app/api/douban/recommends/route.ts @@ -23,7 +23,7 @@ interface DoubanRecommendApiResponse { }>; } -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: NextRequest) { const { searchParams } = new URL(request.url); diff --git a/src/app/api/douban/route.ts b/src/app/api/douban/route.ts index 53b23b4..8cf24fb 100644 --- a/src/app/api/douban/route.ts +++ b/src/app/api/douban/route.ts @@ -13,7 +13,7 @@ interface DoubanApiResponse { }>; } -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: Request) { const { searchParams } = new URL(request.url); diff --git a/src/app/api/favorites/route.ts b/src/app/api/favorites/route.ts index 0273dac..9c67323 100644 --- a/src/app/api/favorites/route.ts +++ b/src/app/api/favorites/route.ts @@ -7,7 +7,7 @@ import { getConfig } from '@/lib/config'; import { db } from '@/lib/db'; import { Favorite } from '@/lib/types'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; /** * GET /api/favorites diff --git a/src/app/api/image-proxy/route.ts b/src/app/api/image-proxy/route.ts index 4939a34..2bf73b3 100644 --- a/src/app/api/image-proxy/route.ts +++ b/src/app/api/image-proxy/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from 'next/server'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; // OrionTV 兼容接口 export async function GET(request: Request) { diff --git a/src/app/api/login/route.ts b/src/app/api/login/route.ts index b407e37..18f44aa 100644 --- a/src/app/api/login/route.ts +++ b/src/app/api/login/route.ts @@ -4,7 +4,7 @@ import { NextRequest, NextResponse } from 'next/server'; import { getConfig } from '@/lib/config'; import { db } from '@/lib/db'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; // 读取存储类型环境变量,默认 localstorage const STORAGE_TYPE = diff --git a/src/app/api/logout/route.ts b/src/app/api/logout/route.ts index ced68a1..8bfa015 100644 --- a/src/app/api/logout/route.ts +++ b/src/app/api/logout/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from 'next/server'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function POST() { const response = NextResponse.json({ ok: true }); diff --git a/src/app/api/playrecords/route.ts b/src/app/api/playrecords/route.ts index d7b4275..f830f29 100644 --- a/src/app/api/playrecords/route.ts +++ b/src/app/api/playrecords/route.ts @@ -7,7 +7,7 @@ import { getConfig } from '@/lib/config'; import { db } from '@/lib/db'; import { PlayRecord } from '@/lib/types'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: NextRequest) { try { diff --git a/src/app/api/register/route.ts b/src/app/api/register/route.ts index d0ca129..79ef281 100644 --- a/src/app/api/register/route.ts +++ b/src/app/api/register/route.ts @@ -4,7 +4,7 @@ import { NextRequest, NextResponse } from 'next/server'; import { getConfig } from '@/lib/config'; import { db } from '@/lib/db'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; // 读取存储类型环境变量,默认 localstorage const STORAGE_TYPE = diff --git a/src/app/api/search/one/route.ts b/src/app/api/search/one/route.ts index 7a8ad38..583ed4e 100644 --- a/src/app/api/search/one/route.ts +++ b/src/app/api/search/one/route.ts @@ -4,7 +4,7 @@ import { getCacheTime, getConfig } from '@/lib/config'; import { searchFromApi } from '@/lib/downstream'; import { yellowWords } from '@/lib/yellow'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; // OrionTV 兼容接口 export async function GET(request: Request) { diff --git a/src/app/api/search/resources/route.ts b/src/app/api/search/resources/route.ts index 26cb631..a4eb218 100644 --- a/src/app/api/search/resources/route.ts +++ b/src/app/api/search/resources/route.ts @@ -4,7 +4,7 @@ import { NextRequest, NextResponse } from 'next/server'; import { getAvailableApiSites } from '@/lib/config'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; // OrionTV 兼容接口 export async function GET(request: NextRequest) { diff --git a/src/app/api/search/route.ts b/src/app/api/search/route.ts index f36f181..aebe707 100644 --- a/src/app/api/search/route.ts +++ b/src/app/api/search/route.ts @@ -6,7 +6,7 @@ import { getCacheTime, getConfig } from '@/lib/config'; import { searchFromApi } from '@/lib/downstream'; import { yellowWords } from '@/lib/yellow'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: Request) { const { searchParams } = new URL(request.url); diff --git a/src/app/api/search/suggestions/route.ts b/src/app/api/search/suggestions/route.ts index 648d0df..4a101d9 100644 --- a/src/app/api/search/suggestions/route.ts +++ b/src/app/api/search/suggestions/route.ts @@ -6,7 +6,7 @@ import { getAuthInfoFromCookie } from '@/lib/auth'; import { getConfig } from '@/lib/config'; import { searchFromApi } from '@/lib/downstream'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: NextRequest) { try { diff --git a/src/app/api/search/ws/route.ts b/src/app/api/search/ws/route.ts index 20fb85f..fb5f23b 100644 --- a/src/app/api/search/ws/route.ts +++ b/src/app/api/search/ws/route.ts @@ -6,7 +6,7 @@ import { getConfig } from '@/lib/config'; import { searchFromApi } from '@/lib/downstream'; import { yellowWords } from '@/lib/yellow'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: NextRequest) { const { searchParams } = new URL(request.url); diff --git a/src/app/api/searchhistory/route.ts b/src/app/api/searchhistory/route.ts index 4d24f73..f025ade 100644 --- a/src/app/api/searchhistory/route.ts +++ b/src/app/api/searchhistory/route.ts @@ -6,7 +6,7 @@ import { getAuthInfoFromCookie } from '@/lib/auth'; import { getConfig } from '@/lib/config'; import { db } from '@/lib/db'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; // 最大保存条数(与客户端保持一致) const HISTORY_LIMIT = 20; diff --git a/src/app/api/server-config/route.ts b/src/app/api/server-config/route.ts index 17f436b..011a0ff 100644 --- a/src/app/api/server-config/route.ts +++ b/src/app/api/server-config/route.ts @@ -5,7 +5,7 @@ import { NextRequest, NextResponse } from 'next/server'; import { getConfig } from '@/lib/config'; import { CURRENT_VERSION } from '@/lib/version' -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: NextRequest) { console.log('server-config called: ', request.url); diff --git a/src/app/api/skipconfigs/route.ts b/src/app/api/skipconfigs/route.ts index 9bf89b3..cbab459 100644 --- a/src/app/api/skipconfigs/route.ts +++ b/src/app/api/skipconfigs/route.ts @@ -7,7 +7,7 @@ import { getConfig } from '@/lib/config'; import { db } from '@/lib/db'; import { SkipConfig } from '@/lib/types'; -export const runtime = 'edge'; +export const runtime = 'nodejs'; export async function GET(request: NextRequest) { try { diff --git a/src/app/layout.tsx b/src/app/layout.tsx index eb408db..e56f085 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -13,6 +13,7 @@ import { SiteProvider } from '../components/SiteProvider'; import { ThemeProvider } from '../components/ThemeProvider'; const inter = Inter({ subsets: ['latin'] }); +export const dynamic = 'force-dynamic'; // 动态生成 metadata,支持配置更新后的标题变化 export async function generateMetadata(): Promise {