--- icon: IconDirectory title: server head.title: 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 ```js [server/api/hello.ts] export default (req, res) => 'Hello World' ``` See the result on . #### Async function ```js [server/api/async.ts] export default async (req, res) => { await someAsyncFunction() return { someData: true } } ``` **Example:** Using Node.js style ```ts [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](#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. ```js export default async (req, res) => { req.someValue = true } ``` There is nothing different about the `req`/`res` objects, so typing them is straightforward. ```ts 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](/docs/directory-structure/nuxt.config#servermiddleware)