Server directory

The server directory is used to create any backend logic for your Nuxt application. It supports HMR and powerful features.

The server/ directory contains API endpoints and server middleware for your project.

API Routes

Nuxt will automatically read in any files in the ~/server/api directory to create API endpoints.

Each file should export a default function that handles API requests. It can return a promise or JSON data directly (or use res.end()).

Examples

Hello world

server/api/hello.ts
export default (req, res) => 'Hello World'

See the result on http://localhost:3000/api/hello .

Async function

server/api/async.ts
export default async (req, res) => {
  await someAsyncFunction()

  return {
    someData: true
  }
}

Example: Using Node.js style

server/api/node.ts
import type { IncomingMessage, ServerResponse } from 'http'

export default async (req: IncomingMessage, res: ServerResponse) => {
  res.statusCode = 200
  res.end('Works!')
}

Server Middleware

Nuxt will automatically read in any files in the ~/server/middleware to create server middleware for your project.

These files will be run on every request, unlike API routes that are mapped to their own routes. This is typically so you can add a common header to all responses, log responses or modify the incoming request object for later use in the request chain.

Each file should export a default function that will handle a request.

export default async (req, res) => {
  req.someValue = true
}

There is nothing different about the req/res objects, so typing them is straightforward.

import type { IncomingMessage, ServerResponse } from 'http'

export default async (req: IncomingMessage, res: ServerResponse) => {
  req.someValue = true
}

More information about custom middleware can be found in the documentation for nuxt.config.js

Edit this page on GitHub Updated at Mon, Dec 6, 2021