Nuxt/docs/content/3.docs/2.directory-structure/13.server.md

2.4 KiB

icon title head.title
IconDirectory server Server directory

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

export default (req, res) => 'Hello World'

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

Async function

export default async (req, res) => {
  await someAsyncFunction()

  return {
    someData: true
  }
}

Example: Using Node.js style

import type { IncomingMessage, ServerResponse } from 'http'

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

Accessing req data

import { useBody, useCookies, useQuery } from 'h3'

export default async (req, res) => {
  const query = await useQuery(req)
  const body = await useBody(req) // only for POST request
  const cookies = useCookies(req)
  
  return { query, body, cookies }
}

Learn more about h3 methods.

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