كيفية إعداد خادم مخصص في Next.js

يتضمن Next.js خادمه الخاص مع next start افتراضيًا. إذا كان لديك خادم خلفي موجود، فلا يزال بإمكانك استخدامه مع Next.js (هذا ليس خادمًا مخصصًا). يسمح لك خادم Next.js المخصص ببدء خادم لأنماط مخصصة برمجيًا. في معظم الأحيان، لن تحتاج إلى هذه الطريقة. ومع ذلك، فهي متاحة إذا كنت بحاجة إلى إخراج.

من الجيد معرفة:

  • قبل اتخاذ قرار استخدام خادم مخصص، ضع في اعتبارك أنه يجب استخدامه فقط عندما لا يستطيع الموجِّه المدمج في Next.js تلبية متطلبات تطبيقك. سيؤدي الخادم المخصص إلى إزالة تحسينات الأداء المهمة، مثل التحسين الثابت التلقائي (Automatic Static Optimization).
  • عند استخدام وضع الإخراج المستقل، فإنه لا يتتبع ملفات الخادم المخصصة. بدلاً من ذلك، يخرج هذا الوضع ملف server.js منفصلًا صغيرًا. لا يمكن استخدام هذه معًا.

ألق نظرة على المثال التالي لخادم مخصص:

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
    }`
  )
})
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
    }`
  )
})

لا يتم تشغيل server.js من خلال محول Next.js أو عملية التجميع. تأكد من أن بناء الجملة وكود المصدر الذي يتطلبه هذا الملف متوافق مع إصدار Node.js الحالي الذي تستخدمه. عرض مثال.

لتشغيل الخادم المخصص، ستحتاج إلى تحديث scripts في package.json كما يلي:

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

بدلاً من ذلك، يمكنك إعداد nodemon (مثال). يستخدم الخادم المخصص الاستيراد التالي لربط الخادم بتطبيق Next.js:

import next from 'next'

const app = next({})

استيراد next أعلاه هو دالة تستقبل كائنًا مع الخيارات التالية:

الخيارالنوعالوصف
confObjectنفس الكائن الذي ستستخدمه في next.config.js. الافتراضي هو {}
devBoolean(اختياري) ما إذا كان سيتم تشغيل Next.js في وضع التطوير أم لا. الافتراضي هو false
dirString(اختياري) موقع مشروع Next.js. الافتراضي هو '.'
quietBoolean(اختياري) إخفاء رسائل الخطأ التي تحتوي على معلومات الخادم. الافتراضي هو false
hostnameString(اختياري) اسم المضيف الذي يعمل عليه الخادم
portNumber(اختياري) المنفذ الذي يعمل عليه الخادم
httpServernode:http#Server(اختياري) خادم HTTP الذي يعمل عليه Next.js
turboBoolean(اختياري) تمكين Turbopack

يمكن بعد ذلك استخدام app الذي تم إرجاعه للسماح لـ Next.js بمعالجة الطلبات حسب الحاجة.