راه‌اندازی سرور سفارشی در Next.js – کنترل مسیرها، مدیریت درخواست‌ها و نکات مهم عملکردی

Next.js به‌صورت پیش‌فرض با دستور next start سرور داخلی خود را اجرا می‌کند. اما در موارد خاص، می‌توان سرور سفارشی راه‌اندازی کرد تا کنترل بیشتری بر مسیرها و درخواست‌ها داشته باشید. این مقاله نحوهٔ ساخت سرور سفارشی با Node.js، پیکربندی اسکریپت‌ها، و نکات مهم مربوط به عملکرد و حالت standalone را بررسی می‌کند.

Custom serverNext.jsRequest handlingSSR performance

~2 دقیقه مطالعه • بروزرسانی ۴ آبان ۱۴۰۴

مقدمه


Next.js به‌صورت پیش‌فرض دارای سرور داخلی است که با دستور next start اجرا می‌شود. اگر اپلیکیشن شما نیاز به کنترل خاصی روی مسیرها یا درخواست‌ها دارد، می‌توانید از سرور سفارشی استفاده کنید. این روش بیشتر برای موارد خاص توصیه می‌شود.


نکات مهم پیش از استفاده


  • سرور سفارشی فقط زمانی توصیه می‌شود که Router داخلی Next.js پاسخ‌گوی نیاز شما نباشد
  • استفاده از سرور سفارشی باعث غیرفعال شدن بهینه‌سازی‌هایی مانند Automatic Static Optimization می‌شود
  • در حالت standalone، فایل‌های سرور سفارشی trace نمی‌شوند و با فایل server.js تولیدشده ناسازگارند

نمونهٔ سرور سفارشی با Node.js


// server.ts
import { createServer } from 'http'
import { parse } from 'url'
import next from 'next'

const port = parseInt(process.env.PORT || '3000', 10)
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare().then(() => {
  createServer((req, res) => {
    const parsedUrl = parse(req.url!, true)
    handle(req, res, parsedUrl)
  }).listen(port)

  console.log(
    `> Server listening at http://localhost:${port} as ${
      dev ? 'development' : process.env.NODE_ENV
    }`
  )
})

پیکربندی اسکریپت‌های package.json


{
  "scripts": {
    "dev": "node server.js",
    "build": "next build",
    "start": "NODE_ENV=production node server.js"
  }
}

در صورت نیاز، می‌توانید از nodemon برای اجرای خودکار در حالت توسعه استفاده کنید.


پارامترهای قابل تنظیم در next()


تابع next() یک شیء تنظیمات دریافت می‌کند:

گزینهنوعتوضیح
confObjectتنظیمات مشابه next.config.js
devBooleanفعال‌سازی حالت توسعه
dirStringمسیر پروژه Next.js
quietBooleanپنهان‌سازی پیام‌های خطا
hostnameStringنام هاست سرور
portNumberپورت سرور
httpServerServerسرور HTTP موجود
turbopackBooleanفعال‌سازی Turbopack
webpackBooleanفعال‌سازی Webpack

جمع‌بندی


سرور سفارشی در Next.js امکان کنترل دقیق‌تر مسیرها و درخواست‌ها را فراهم می‌کند، اما باید با دقت استفاده شود. در بیشتر پروژه‌ها، Router داخلی Next.js کافی است. اگر نیاز به سرور سفارشی دارید، مطمئن شوید که از حالت standalone استفاده نمی‌کنید و عملکرد اپلیکیشن را به‌درستی ارزیابی کرده‌اید.


نوشته و پژوهش شده توسط دکتر شاهین صیامی