Einrichtung eines benutzerdefinierten Servers in Next.js

Next.js enthält standardmäßig einen eigenen Server mit next start. Wenn Sie bereits über ein Backend verfügen, können Sie dieses weiterhin mit Next.js verwenden (dies ist kein benutzerdefinierter Server). Ein benutzerdefinierter Next.js-Server ermöglicht es Ihnen, einen Server programmatisch für benutzerdefinierte Muster zu starten. In den meisten Fällen werden Sie diesen Ansatz nicht benötigen. Er steht jedoch zur Verfügung, falls erforderlich.

Wichtig zu wissen:

  • Bevor Sie sich für einen benutzerdefinierten Server entscheiden, sollten Sie bedenken, dass dieser nur verwendet werden sollte, wenn der integrierte Router von Next.js Ihre Anforderungen nicht erfüllen kann. Ein benutzerdefinierter Server entfernt wichtige Leistungsoptimierungen wie die Automatische statische Optimierung.
  • Bei Verwendung des Standalone-Ausgabemodus werden benutzerdefinierte Serverdateien nicht nachverfolgt. Dieser Modus gibt stattdessen eine separate minimale server.js-Datei aus. Diese können nicht zusammen verwendet werden.

Sehen Sie sich das folgende Beispiel eines benutzerdefinierten Servers an:

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 wird nicht durch den Next.js-Compiler oder den Bundling-Prozess ausgeführt. Stellen Sie sicher, dass die Syntax und der Quellcode dieser Datei mit der von Ihnen verwendeten Node.js-Version kompatibel sind. Beispiel ansehen.

Um den benutzerdefinierten Server auszuführen, müssen Sie die scripts in package.json wie folgt aktualisieren:

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

Alternativ können Sie nodemon einrichten (Beispiel). Der benutzerdefinierte Server verwendet den folgenden Import, um den Server mit der Next.js-Anwendung zu verbinden:

import next from 'next'

const app = next({})

Der obige next-Import ist eine Funktion, die ein Objekt mit den folgenden Optionen empfängt:

OptionTypBeschreibung
confObjectDas gleiche Objekt, das Sie in next.config.js verwenden würden. Standard: {}
devBoolean(Optional) Ob Next.js im Entwicklungsmodus gestartet werden soll. Standard: false
dirString(Optional) Speicherort des Next.js-Projekts. Standard: '.'
quietBoolean(Optional) Fehlermeldungen mit Serverinformationen ausblenden. Standard: false
hostnameString(Optional) Der Hostname, hinter dem der Server läuft
portNumber(Optional) Der Port, hinter dem der Server läuft
httpServernode:http#Server(Optional) Der HTTP-Server, hinter dem Next.js läuft
turboBoolean(Optional) Turbopack aktivieren

Die zurückgegebene app kann dann verwendet werden, um Next.js Anfragen nach Bedarf verarbeiten zu lassen.