Senior #after#instrumentation#observability
after() và instrumentation.ts dùng để làm gì trong Next.js?
⚡ Trả lời nhanh
`after()` (stable từ Next 15.1) lên lịch chạy code sau khi response đã gửi xong, phù hợp logging, analytics mà không làm chậm người dùng. `instrumentation.ts` export `register()` chạy một lần khi server khởi động để cắm monitoring như OpenTelemetry hoặc Sentry.
// app/api/order/route.ts
import { after } from "next/server";
export async function POST(req: Request) {
const order = await createOrder(await req.json());
after(async () => {
await analytics.track("order_created", order.id); // chạy sau khi gửi response
});
return Response.json(order);
}
// instrumentation.ts (gốc dự án hoặc src/)
export async function register() {
if (process.env.NEXT_RUNTIME === "nodejs") {
await import("./instrumentation-node"); // khởi tạo OpenTelemetry/Sentry
}
}
afterdùng được trong Server Component, Server Action, Route Handler, Middleware; nó không làm response đợi, nhưng nền tảng serverless phải giữ function sống (dùngwaitUntil).- Trong
aftercó thể đọcheaders()/cookies()nếu gọi ngay trong scope request (không phải trong callback trong Server Component). instrumentation.tsbật mặc định ở Next 15 (trước đó cầnexperimental.instrumentationHook); kiểm traNEXT_RUNTIMEvì có cả Edge.- Còn có
onRequestErrorđể báo lỗi server về dịch vụ theo dõi.