知识库首页 知识库-世界 server-after-nonblocking.md

server after nonblocking

本地来源:Knowledge/World/项目/Practice/Claude-Skills/vercel-react-best-practices/rules/server-after-nonblocking.md


title: Use after() for Non-Blocking Operations impact: MEDIUM impactDescription: faster response times tags: server, async, logging, analytics, side-effects


Use after() for Non-Blocking Operations

Use Next.js's after() to schedule work that should execute after a response is sent. This prevents logging, analytics, and other side effects from blocking the response.

Incorrect (blocks response):

import { logUserAction } from '@/app/utils'

export async function POST(request: Request) {
  // Perform mutation
  await updateDatabase(request)

  // Logging blocks the response
  const userAgent = request.headers.get('user-agent') || 'unknown'
  await logUserAction({ userAgent })

  return new Response(JSON.stringify({ status: 'success' }), {
    status: 200,
    headers: { 'Content-Type': 'application/json' }
  })
}

Correct (non-blocking):

import { after } from 'next/server'
import { headers, cookies } from 'next/headers'
import { logUserAction } from '@/app/utils'

export async function POST(request: Request) {
  // Perform mutation
  await updateDatabase(request)

  // Log after response is sent
  after(async () => {
    const userAgent = (await headers()).get('user-agent') || 'unknown'
    const sessionCookie = (await cookies()).get('session-id')?.value || 'anonymous'

    logUserAction({ sessionCookie, userAgent })
  })

  return new Response(JSON.stringify({ status: 'success' }), {
    status: 200,
    headers: { 'Content-Type': 'application/json' }
  })
}

The response is sent immediately while logging happens in the background.

Common use cases:

  • Analytics tracking
  • Audit logging
  • Sending notifications
  • Cache invalidation
  • Cleanup tasks

Important notes:

  • after() runs even if the response fails or redirects
  • Works in Server Actions, Route Handlers, and Server Components

Reference: https://nextjs.org/docs/app/api-reference/functions/after

本文档为站内渲染。原始文件本地路径:saas/source/knowledge-world/Knowledge-World-项目-Practice-Claude-Skills-vercel-react-best--3fbbd6.md(仅本地保留,不入库不部署)