From 531017b5643ba5c7bf9287d7e51dbf426ad1d47e Mon Sep 17 00:00:00 2001 From: Evan Shortiss Date: Thu, 9 May 2024 09:53:50 -0700 Subject: [PATCH 1/2] fix: use ctx.waitUntil instead of connection idle timeout --- package.json | 1 + pages/api/neon-prisma-global.ts | 14 ++++++++++---- pnpm-lock.yaml | 7 +++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 6a2ee70..2879fd6 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "@types/node": "20.12.8", "@types/react": "18.3.1", "@upstash/redis": "^1.28.4", + "@vercel/edge": "^1.1.1", "@vercel/kv": "^1.0.1", "@vercel/postgres": "^0.8.0", "@xata.io/client": "^0.29.4", diff --git a/pages/api/neon-prisma-global.ts b/pages/api/neon-prisma-global.ts index ba13b1e..b81145f 100644 --- a/pages/api/neon-prisma-global.ts +++ b/pages/api/neon-prisma-global.ts @@ -2,24 +2,30 @@ import { NextRequest as Request, NextResponse as Response } from "next/server"; import { Pool } from '@neondatabase/serverless' import { PrismaNeon } from '@prisma/adapter-neon' import { PrismaClient } from '@/prisma-neon/prisma-client' +import { RequestContext } from "@vercel/edge"; export const config = { runtime: "edge", }; -const pool = new Pool({ connectionString: process.env.NEON_DATABASE_URL, idleTimeoutMillis: 1 }) -const adapter = new PrismaNeon(pool) -const prisma = new PrismaClient({ adapter }) + const start = Date.now() -export default async function api(req: Request) { +export default async function api(req: Request, ctx: RequestContext) { const count = toNumber(new URL(req.url).searchParams.get("count")); const time = Date.now(); + const pool = new Pool({ connectionString: process.env.NEON_DATABASE_URL }) + const adapter = new PrismaNeon(pool) + const prisma = new PrismaClient({ adapter }) + let data = null; for (let i = 0; i < count; i++) { data = await prisma.employees.findMany({ take: 10 }); } + + ctx.waitUntil(pool.end()); + return Response.json( { data, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index affe30c..e3966e4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,6 +59,9 @@ dependencies: '@upstash/redis': specifier: ^1.28.4 version: 1.28.4 + '@vercel/edge': + specifier: ^1.1.1 + version: 1.1.1 '@vercel/kv': specifier: ^1.0.1 version: 1.0.1 @@ -970,6 +973,10 @@ packages: crypto-js: 4.2.0 dev: false + /@vercel/edge@1.1.1: + resolution: {integrity: sha512-NtKiIbn9Cq6HWGy+qRudz28mz5nxfOJWls5Pnckjw1yCfSX8rhXdvY/il3Sy3Zd5n/sKCM2h7VSCCpJF/oaDrQ==} + dev: false + /@vercel/kv@1.0.1: resolution: {integrity: sha512-uTKddsqVYS2GRAM/QMNNXCTuw9N742mLoGRXoNDcyECaxEXvIHG0dEY+ZnYISV4Vz534VwJO+64fd9XeSggSKw==} engines: {node: '>=14.6'} From aad47957a6e58019fe0dfe52302d06a001109a5d Mon Sep 17 00:00:00 2001 From: Evan Shortiss Date: Thu, 9 May 2024 11:09:05 -0700 Subject: [PATCH 2/2] fix: use vercel/functions waitUntil API --- package.json | 2 +- pages/api/neon-prisma-global.ts | 6 +++--- pnpm-lock.yaml | 11 ++++++----- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 2879fd6..8160c82 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/node": "20.12.8", "@types/react": "18.3.1", "@upstash/redis": "^1.28.4", - "@vercel/edge": "^1.1.1", + "@vercel/functions": "^1.0.1", "@vercel/kv": "^1.0.1", "@vercel/postgres": "^0.8.0", "@xata.io/client": "^0.29.4", diff --git a/pages/api/neon-prisma-global.ts b/pages/api/neon-prisma-global.ts index b81145f..859b20d 100644 --- a/pages/api/neon-prisma-global.ts +++ b/pages/api/neon-prisma-global.ts @@ -2,7 +2,7 @@ import { NextRequest as Request, NextResponse as Response } from "next/server"; import { Pool } from '@neondatabase/serverless' import { PrismaNeon } from '@prisma/adapter-neon' import { PrismaClient } from '@/prisma-neon/prisma-client' -import { RequestContext } from "@vercel/edge"; +import { waitUntil } from "@vercel/functions"; export const config = { runtime: "edge", @@ -10,7 +10,7 @@ export const config = { const start = Date.now() -export default async function api(req: Request, ctx: RequestContext) { +export default async function api(req: Request) { const count = toNumber(new URL(req.url).searchParams.get("count")); const time = Date.now(); @@ -24,7 +24,7 @@ export default async function api(req: Request, ctx: RequestContext) { data = await prisma.employees.findMany({ take: 10 }); } - ctx.waitUntil(pool.end()); + waitUntil(pool.end()); return Response.json( { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e3966e4..d0c525f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,9 +59,9 @@ dependencies: '@upstash/redis': specifier: ^1.28.4 version: 1.28.4 - '@vercel/edge': - specifier: ^1.1.1 - version: 1.1.1 + '@vercel/functions': + specifier: ^1.0.1 + version: 1.0.1 '@vercel/kv': specifier: ^1.0.1 version: 1.0.1 @@ -973,8 +973,9 @@ packages: crypto-js: 4.2.0 dev: false - /@vercel/edge@1.1.1: - resolution: {integrity: sha512-NtKiIbn9Cq6HWGy+qRudz28mz5nxfOJWls5Pnckjw1yCfSX8rhXdvY/il3Sy3Zd5n/sKCM2h7VSCCpJF/oaDrQ==} + /@vercel/functions@1.0.1: + resolution: {integrity: sha512-YBOEKITWgRWQJg2/0TJaiZOAsJz/OqjBfZO87lBA5PtddNjjEUQQxSlon/ank+RC7laJ/51zMKkv9rgprmLMow==} + engines: {node: '>= 16'} dev: false /@vercel/kv@1.0.1: