ソースを参照

fix: 修复 API route 中 bn.js 服务端打包导致的 _bn 属性访问错误

- 在 next.config.ts 中添加 serverExternalPackages,将 bn.js、@solana/web3.js、@coral-xyz/anchor 排除在服务端打包之外
- 在 my-lp/detail route 中添加 data.result?.data 空值检查,防止外部 API 返回异常数据时崩溃

Co-authored-by: Cursor <cursoragent@cursor.com>
lushdog@outlook.com 1 ヶ月 前
コミット
c4b6aba994
2 ファイル変更15 行追加1 行削除
  1. 7 0
      next.config.ts
  2. 8 1
      src/app/api/my-lp/detail/route.ts

+ 7 - 0
next.config.ts

@@ -4,6 +4,13 @@ console.log('SOL_ENDPOINT', process.env.SOL_ENDPOINT)
 
 const nextConfig: NextConfig = {
 	output: 'standalone',
+	// 防止 bn.js 和 Solana 相关包在服务端被 Turbopack 打包,
+	// 避免 BN 实例跨 chunk 时出现 _bn 属性访问错误
+	serverExternalPackages: [
+		'bn.js',
+		'@solana/web3.js',
+		'@coral-xyz/anchor',
+	],
 	// 忽略构建时的类型错误(因为 lib 目录是第三方代码,可能有类型问题)
 	typescript: {
 		// 设置为 true 会忽略所有类型错误,包括项目代码

+ 8 - 1
src/app/api/my-lp/detail/route.ts

@@ -25,7 +25,14 @@ export async function GET(request: NextRequest) {
 
 		const data = await response.json()
 
-		const { pool, lowerTick, upperTick } = data.result?.data as {
+		if (!data.result?.data) {
+			return NextResponse.json(
+				{ retCode: 404, retMsg: '未找到仓位数据' },
+				{ status: 404 }
+			)
+		}
+
+		const { pool, lowerTick, upperTick } = data.result.data as {
 			lowerTick: number
 			upperTick: number
 			pool: {