📋 Table of Contents
- हम क्या बना रहे हैं
- प्रोजेक्ट सेटअप
- डेटाबेस: नियॉन + प्रिज्मा के साथ PostgreSQL
- 📋कॉपी
- ऐप राउटर घटक डिफ़ॉल्ट रूप से सर्वर घटक हैं – वे सर्वर पर चलते हैं और सीधे डेटाबेस से क्वेरी कर सकते हैं:
- सर्वर क्रियाएँ फॉर्म सबमिशन और म्यूटेशन के लिए एपीआई मार्गों को प्रतिस्थापित करती हैं:
- 📋कॉपी
- परिनियोजन के बाद: GitHub OAuth कॉलबैक URL को
- – सर्वर क्रियाओं और एपीआई मार्गों पर अपस्टैश रेटलिमिट
- नवीनतम Next.js: स्थिर टर्बोपैक (5× तेज), रिएक्ट 19 आवश्यक, एसिंक अनुरोध एपीआई, बेहतर सर्वर क्रियाएँ। ऐप राउटर आगे बढ़ने वाला मानक है।
हम क्या बना रहे हैं
एक पूर्ण-स्टैक कार्य प्रबंधन ऐप: Next.js 15 ऐप राउटर, नियॉन के माध्यम से PostgreSQL (सर्वर रहित), प्रिज्मा ORM, सर्वर एक्शन (म्यूटेशन के लिए कोई अलग एपीआई मार्ग नहीं), Auth.js v5 GitHub OAuth, वर्सेल में तैनात किया गया।
प्रोजेक्ट सेटअप
npx create-next-app@latest taskapp \
--typescript --tailwind --eslint --app --src-dir --import-alias "@/*"
cd taskapp
डेटाबेस: नियॉन + प्रिज्मा के साथ PostgreSQL
|||| पर एक निःशुल्क डेटाबेस बनाएं नियॉन.टेक. फिर:📋कॉपी
npm install prisma @prisma/client
npx prisma init
:.env.local📋कॉपी
DATABASE_URL="postgresql://user:pass@ep-xxx.us-east-2.aws.neon.tech/neondb?sslmode=require"
NEXTAUTH_SECRET="your-random-secret-here"
GITHUB_CLIENT_ID="your-github-oauth-app-id"
GITHUB_CLIENT_SECRET="your-github-oauth-app-secret"
📋कॉपी
// prisma/schema.prisma
model User {
id String @id @default(cuid())
email String @unique
name String?
createdAt DateTime @default(now())
tasks Task[]
}
model Task {
id String @id @default(cuid())
title String
status TaskStatus @default(PENDING)
priority Priority @default(MEDIUM)
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([userId])
}
enum TaskStatus { PENDING IN_PROGRESS COMPLETED CANCELLED }
enum Priority { LOW MEDIUM HIGH URGENT }
npx prisma migrate dev --name init
npx prisma generate
// src/lib/db.ts
import { PrismaClient } from '@prisma/client';
const globalForPrisma = globalThis as unknown as { prisma: PrismaClient };
export const db = globalForPrisma.prisma ?? new PrismaClient();
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = db;
ऐप राउटर घटक डिफ़ॉल्ट रूप से सर्वर घटक हैं – वे सर्वर पर चलते हैं और सीधे डेटाबेस से क्वेरी कर सकते हैं:
📋कॉपी
// src/app/dashboard/page.tsx (Server Component)
import { db } from '@/lib/db';
import { auth } from '@/lib/auth';
import { redirect } from 'next/navigation';
export default async function DashboardPage() {
const session = await auth();
if (!session?.user) redirect('/');
const tasks = await db.task.findMany({
where: { userId: session.user.id, status: { not: 'CANCELLED' } },
orderBy: [{ priority: 'desc' }, { createdAt: 'desc' }],
take: 50,
});
return (
<main className="container mx-auto p-6">
<h1>My Tasks</h1>
{tasks.map(task => <TaskCard key={task.id} task={task} />)}
</main>
);
}
उत्परिवर्तन के लिए सर्वर क्रियाएँ
सर्वर क्रियाएँ फॉर्म सबमिशन और म्यूटेशन के लिए एपीआई मार्गों को प्रतिस्थापित करती हैं:
📋कॉपी
// src/actions/tasks.ts
'use server';
import { db } from '@/lib/db';
import { auth } from '@/lib/auth';
import { revalidatePath } from 'next/cache';
import { z } from 'zod';
const Schema = z.object({
title: z.string().min(1).max(200),
priority: z.enum(['LOW','MEDIUM','HIGH','URGENT']).default('MEDIUM'),
});
export async function createTask(formData: FormData) {
const session = await auth();
if (!session?.user?.id) throw new Error('Unauthorized');
const parsed = Schema.safeParse({
title: formData.get('title'),
priority: formData.get('priority') || 'MEDIUM',
});
if (!parsed.success) return { error: parsed.error.flatten().fieldErrors };
await db.task.create({ data: { ...parsed.data, userId: session.user.id } });
revalidatePath('/dashboard');
return { success: true };
}
Auth.js v5revalidatePathके साथ प्रमाणीकरण 📋कॉपी
📋कॉपी
npm install next-auth@beta @auth/prisma-adapter
// src/lib/auth.ts
import NextAuth from 'next-auth';
import GitHub from 'next-auth/providers/github';
import { PrismaAdapter } from '@auth/prisma-adapter';
import { db } from './db';
export const { auth, handlers, signIn, signOut } = NextAuth({
adapter: PrismaAdapter(db),
providers: [GitHub({ clientId: process.env.GITHUB_CLIENT_ID!, clientSecret: process.env.GITHUB_CLIENT_SECRET! })],
session: { strategy: 'database' },
callbacks: { session: ({ session, user }) => ({ ...session, user: { ...session.user, id: user.id } }) }
});
.src/app/api/auth/[...nextauth]/route.tsवर्सेल में तैनातीhandlers as GET, handlers as POST📋कॉपी
परिनियोजन के बाद: GitHub OAuth कॉलबैक URL को
# Install Vercel CLI and deploy
npm install -g vercel
vercel
# Set environment variables
vercel env add DATABASE_URL
vercel env add NEXTAUTH_SECRET
vercel env add GITHUB_CLIENT_ID
vercel env add GITHUB_CLIENT_SECRET
vercel --prod
.https://your-app.vercel.app/api/auth/callback/githubउत्पादन चेकलिस्टnpx prisma migrate deployदर सीमित करना
– सर्वर क्रियाओं और एपीआई मार्गों पर अपस्टैश रेटलिमिट
- त्रुटि सीमाएँ– जोड़ें
- सुंदर फ़ॉलबैक के लिए फ़ाइलेंलोड होने की स्थिति
error.tsx– जोड़ें - सस्पेंस कंकालों के लिएइनपुट सत्यापन
loading.tsx— सर्वर क्रियाओं पर हमेशा ज़ॉड का उपयोग करें - कनेक्शन पूलिंग– जोड़ें
- नियॉन यूआरएल के लिएसुरक्षा शीर्षलेख
?pgbouncer=true&connection_limit=1— के माध्यम से जोड़ें - हेडर()🔧शिप करने के लिए तैयार हैं?
next.config.tsNext.js 15 + PostgreSQL 2026 में प्रमुख फुल-स्टैक स्टैक है। एक्सप्लोर करें
टाइपस्क्रिप्ट क्यों आवश्यक है
बड़े Next.js ऐप्स और मास्टर के लिएasync/प्रतीक्षा पैटर्नसर्वर घटकों और क्रियाओं के लिए।अक्सर पूछे जाने वाले प्रश्नNext.js 15 क्या है?
नवीनतम Next.js: स्थिर टर्बोपैक (5× तेज), रिएक्ट 19 आवश्यक, एसिंक अनुरोध एपीआई, बेहतर सर्वर क्रियाएँ। ऐप राउटर आगे बढ़ने वाला मानक है।
2026 में ऐप राउटर या पेज राउटर?
सभी नई परियोजनाओं के लिए ऐप राउटर। पेज राउटर काम करता है लेकिन उसे कोई नई सुविधाएँ नहीं मिलतीं।
Next.js के साथ किस डेटाबेस का उपयोग करना है?
नियॉन (सर्वर रहित) + प्रिज्मा या ड्रिज़ल ओआरएम के माध्यम से पोस्टग्रेएसक्यूएल। यदि आपको बिल्ट-इन ऑथ और रीयल-टाइम की आवश्यकता है तो सुपाबेस।
सर्वर क्रियाएँ क्या हैं?
Async सर्वर फ़ंक्शंस (‘सर्वर का उपयोग करें’ के रूप में चिह्नित) को रिएक्ट से कॉल किया गया। उत्परिवर्तन के लिए एपीआई मार्ग बदलें। टाइप-सुरक्षित, आशावादी अपडेट का समर्थन करें।
कैसे तैनात करें?
वर्सेल (शून्य कॉन्फ़िगरेशन, नेक्स्ट.जेएस टीम द्वारा बनाया गया)। सेल्फ-होस्ट: अगला निर्माण + nginx, या डॉकर के पीछे अगली शुरुआत।
How to deploy?
Vercel (zero config, made by Next.js team). Self-host: next build + next start behind nginx, or Docker.
🔗 Share this article
✍️ Leave a Comment