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.
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
| Directory | Auto-imported in | Runs on |
|---|---|---|
composables/ | App code | Client + SSR |
server/utils/ | Server code only | Server only |
utils/ | App code | Client + SSR |