~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() یک شیء تنظیمات دریافت میکند:
| گزینه | نوع | توضیح |
|---|---|---|
| conf | Object | تنظیمات مشابه next.config.js |
| dev | Boolean | فعالسازی حالت توسعه |
| dir | String | مسیر پروژه Next.js |
| quiet | Boolean | پنهانسازی پیامهای خطا |
| hostname | String | نام هاست سرور |
| port | Number | پورت سرور |
| httpServer | Server | سرور HTTP موجود |
| turbopack | Boolean | فعالسازی Turbopack |
| webpack | Boolean | فعالسازی Webpack |
جمعبندی
سرور سفارشی در Next.js امکان کنترل دقیقتر مسیرها و درخواستها را فراهم میکند، اما باید با دقت استفاده شود. در بیشتر پروژهها، Router داخلی Next.js کافی است. اگر نیاز به سرور سفارشی دارید، مطمئن شوید که از حالت standalone استفاده نمیکنید و عملکرد اپلیکیشن را بهدرستی ارزیابی کردهاید.
نوشته و پژوهش شده توسط دکتر شاهین صیامی