Sharing Server Utilities

server/utils — Auto-Imported on the Server

Sharing Server Utilities

Files in server/utils/ are auto-imported inside any server file — handlers, middleware, plugins — the server-side mirror of the composables/ directory.

3 min read Level 2/5 #nuxt#server#utils
What you'll learn
  • Drop a helper file under server/utils with named exports
  • Use the helper from a server route with no import statement
  • Compose helpers across multiple routes for shared logic

composables/ is for shared client/universal logic. server/utils/ is the server-side equivalent — helpers auto-imported in any file under server/.

Drop a Helper

// server/utils/db.ts
import { drizzle } from 'drizzle-orm/postgres-js'
import postgres from 'postgres'

const cfg = useRuntimeConfig()
const client = postgres(cfg.dbUrl)
export const db = drizzle(client)

Use It Anywhere

// server/api/users.get.ts
import { users } from '~/server/db/schema'

export default defineEventHandler(async () => {
  return await db.select().from(users)
})

Notice: no import { db } .... The named export db is auto-imported by Nitro because the file lives under server/utils/.

Composing Helpers

// server/utils/auth.ts
import jose from 'jose'

const secret = new TextEncoder().encode(useRuntimeConfig().jwtSecret)

export async function signToken(payload: Record<string, unknown>) {
  return await new jose.SignJWT(payload)
    .setProtectedHeader({ alg: 'HS256' })
    .setExpirationTime('1h')
    .sign(secret)
}

export async function verifyToken(token: string) {
  const { payload } = await jose.jwtVerify(token, secret)
  return payload
}

Use across routes:

// server/api/login.post.ts
export default defineEventHandler(async (event) => {
  const body = await readBody<{ email: string }>(event)
  const user = await db.select().from(users).where(eq(users.email, body.email))
  const token = await signToken({ sub: user[0].id })
  setCookie(event, 'token', token, { httpOnly: true })
  return { ok: true }
})

Mental Model

DirectoryAuto-imported inRuns on
composables/App codeClient + SSR
server/utils/Server code onlyServer only
utils/App codeClient + SSR
useCookie & Cookies on the Server →