Sun Feb 16 2025
Next.js, React tabanlı bir framework olarak modern web uygulamaları geliştirmek için oldukça popüler hale geldi. Özellikle son zamanlarda Next.js'in App Router yapısı, geliştiricilere daha esnek ve güçlü bir routing sistemi sunuyor. Peki, bu yapıyı kullanarak arka planda belirli periyotlarla çalışan cron job'lar nasıl oluşturulur? Bu yazıda, Next.js'de App Router kullanarak cron job oluşturma sürecini adım adım ele alacağız. Ayrıca, cron job zamanlamalarını nasıl özelleştirebileceğinizi de detaylı bir şekilde inceleyeceğiz.
Cron job, belirli zaman aralıklarında otomatik olarak çalışan görevlerdir. Örneğin, her gün saat 00:00'da veritabanınızı temizlemek, haftalık raporlar oluşturmak veya belirli API'lerden veri çekmek gibi işlemler için cron job'lar kullanılır.
Next.js, sunucu tarafında çalışan API rotaları sayesinde cron job'lar oluşturmak için oldukça uygun bir ortam sunar. Ancak, Next.js'in kendi içinde cron job desteği yoktur. Bu nedenle, cron job'ları oluşturmak için harici kütüphaneler veya servisler kullanmamız gerekiyor.
İlk olarak, yeni bir Next.js projesi oluşturalım:
npx create-next-app@latest nextjs-cron-job
cd nextjs-cron-job
Cron job'ları oluşturmak için node-cron paketini kullanacağız. Bu paket, Node.js üzerinde cron benzeri görevler oluşturmamızı sağlar.
npm install node-cron
Next.js'de API rotaları, pages/api dizini altında oluşturulur. Ancak, App Router kullanıyorsanız, app/api dizini altında API rotalarınızı oluşturabilirsiniz.
Örneğin, app/api/cron/route.js dosyasını oluşturalım:
// app/api/cron/route.js
import { NextResponse } from "next/server";
import cron from "node-cron";
// Cron job'u başlat
cron.schedule("* * * * *", () => {
console.log("Cron job çalıştı:", new Date().toLocaleTimeString());
});
export async function GET() {
return NextResponse.json({ message: "Cron job başlatıldı!" });
}
Bu örnekte, her dakika bir kez çalışacak bir cron job oluşturduk. cron.schedule fonksiyonuna verilen '* * * * *' ifadesi, cron job'un her dakika çalışacağını belirtir.
Cron job'larınızı farklı zaman aralıklarında çalışacak şekilde özelleştirebilirsiniz. İşte bazı yaygın cron job zamanlama örnekleri:
cron.schedule("* * * * *", () => {
console.log("Her dakika çalışan cron job:", new Date().toLocaleTimeString());
});
cron.schedule("0 * * * *", () => {
console.log(
"Her saat başı çalışan cron job:",
new Date().toLocaleTimeString()
);
});
cron.schedule('0 0 * * *', () => {
console.log('Her gün saat 00:00'da çalışan cron job:', new Date().toLocaleTimeString());
});
cron.schedule('0 12 * * 0', () => {
console.log('Her Pazar saat 12:00'de çalışan cron job:', new Date().toLocaleTimeString());
});
cron.schedule('0 0 1 * *', () => {
console.log('Her ayın 1'inde saat 00:00'da çalışan cron job:', new Date().toLocaleTimeString());
});
cron.schedule("*/5 * * * *", () => {
console.log(
"Her 5 dakikada bir çalışan cron job:",
new Date().toLocaleTimeString()
);
});
cron.schedule("*/30 * * * * *", () => {
console.log(
"Her 30 saniyede bir çalışan cron job:",
new Date().toLocaleTimeString()
);
});
Bu örneklerde, cron job'larınızı farklı zaman aralıklarında çalışacak şekilde özelleştirebilirsiniz. Cron job zamanlamaları, node-cron paketi tarafından desteklenen standart cron ifadelerine göre belirlenir.
Oluşturduğumuz API rotasını tetiklemek için bir HTTP isteği göndermemiz gerekiyor. Bunu manuel olarak yapabileceğimiz gibi, bir başlangıç script'i ile de yapabiliriz.
Örneğin, package.json dosyasına bir script ekleyelim:
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"cron": "curl http://localhost:3000/api/cron"
}
Bu script'i çalıştırarak cron job'u başlatabiliriz:
npm run cron
Cron job'u otomatik olarak başlatmak için, Next.js uygulamasının başlangıcında API rotasını tetikleyebiliriz. Bunun için app/layout.js veya app/page.js dosyasında bir useEffect hook'u kullanabiliriz.
// app/page.js
"use client";
import { useEffect } from "react";
export default function Home() {
useEffect(() => {
fetch("/api/cron")
.then((response) => response.json())
.then((data) => console.log(data.message))
.catch((error) => console.error("Cron job başlatılamadı:", error));
}, []);
return (
<div>
<h1>Next.js Cron Job Örneği</h1>
<p>Cron job başlatıldı!</p>
</div>
);
}
Bu sayede, uygulama her başladığında cron job otomatik olarak başlatılacaktır.
Cron job'larınızı daha karmaşık görevler için de kullanabilirsiniz. Örneğin, bir veritabanı temizleme işlemi veya harici bir API'den veri çekme işlemi gerçekleştirebilirsiniz.
// app/api/cron/route.js
import { NextResponse } from "next/server";
import cron from "node-cron";
import axios from "axios";
// Cron job'u başlat
cron.schedule("0 0 * * *", async () => {
console.log(
"Günlük veri çekme işlemi başlatıldı:",
new Date().toLocaleTimeString()
);
try {
const response = await axios.get("https://api.example.com/data");
console.log("Veri çekme işlemi başarılı:", response.data);
} catch (error) {
console.error("Veri çekme işlemi başarısız:", error);
}
});
export async function GET() {
return NextResponse.json({ message: "Cron job başlatıldı!" });
}
Bu örnekte, her gün saat 00:00'da bir API'den veri çeken bir cron job oluşturduk.
Development ortamında cron job'ları bu şekilde çalıştırabilirsiniz. Ancak, production ortamında cron job'ları daha güvenilir bir şekilde çalıştırmak için harici servisler kullanmanız önerilir. Örneğin, Vercel'in sunucu işlevleri (serverless functions) veya AWS Lambda gibi servisler, cron job'larınızı daha güvenilir bir şekilde çalıştırmanıza olanak tanır.
Next.js'de App Router kullanarak cron job oluşturmak, özellikle belirli periyotlarla çalışan görevler için oldukça kullanışlıdır. Bu yazıda, node-cron paketini kullanarak nasıl basit bir cron job oluşturabileceğinizi adım adım ele aldık. Ayrıca, cron job zamanlamalarını nasıl özelleştirebileceğinizi de detaylı bir şekilde inceledik. Ancak, production ortamında cron job'larınızı daha güvenilir bir şekilde çalıştırmak için harici servisler kullanmanız önemlidir.
Umarım bu yazı, Next.js'de cron job oluşturma sürecini anlamanıza yardımcı olmuştur. Herhangi bir sorunuz veya geri bildiriminiz varsa, lütfen yorum bırakmaktan çekinmeyin!
Not: Bu yazıda kullanılan kod örnekleri ve adımlar, Next.js'in en güncel sürümüne göre hazırlanmıştır. Eğer farklı bir sürüm kullanıyorsanız, bazı adımlar değişiklik gösterebilir.
All rights reserved