or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

auto-imports.mdbuild-system.mdcompatibility.mdcomponents.mdconfiguration.mdcontext-runtime.mddevelopment-tools.mdindex.mdmodule-system.mdpath-resolution.mdplugins-templates.mdserver-integration.md

server-integration.mddocs/

0

# Server Integration

1

2

Nitro server handler management, plugin registration, and server-side functionality integration for Nuxt applications.

3

4

## Capabilities

5

6

### Server Handler Management

7

8

Add and manage server-side request handlers for API routes and middleware.

9

10

```typescript { .api }

11

/**

12

* Add Nitro server handler

13

* @param handler - Server handler configuration

14

*/

15

function addServerHandler(handler: NitroEventHandler): void;

16

17

/**

18

* Add development-only server handler

19

* @param handler - Development server handler configuration

20

*/

21

function addDevServerHandler(handler: NitroDevEventHandler): void;

22

23

interface NitroEventHandler {

24

/** Handler route pattern */

25

route?: string;

26

/** HTTP method(s) */

27

method?: HTTPMethod | HTTPMethod[];

28

/** Handler function file path */

29

handler: string;

30

/** Lazy load handler */

31

lazy?: boolean;

32

/** Handler middleware flag */

33

middleware?: boolean;

34

/** Handler metadata */

35

meta?: HandlerMeta;

36

}

37

38

interface NitroDevEventHandler extends NitroEventHandler {

39

/** Development environment only */

40

dev?: boolean;

41

}

42

43

type HTTPMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS";

44

45

interface HandlerMeta {

46

/** Handler name */

47

name?: string;

48

/** Handler description */

49

description?: string;

50

[key: string]: any;

51

}

52

```

53

54

**Usage Examples:**

55

56

```typescript

57

import { addServerHandler, addDevServerHandler } from "@nuxt/kit";

58

59

// Add API route handler

60

addServerHandler({

61

route: "/api/users",

62

handler: "~/server/api/users.get.ts"

63

});

64

65

// Add handler with specific method

66

addServerHandler({

67

route: "/api/auth/login",

68

method: "POST",

69

handler: "~/server/api/auth/login.post.ts"

70

});

71

72

// Add middleware handler

73

addServerHandler({

74

handler: "~/server/middleware/cors.ts",

75

middleware: true

76

});

77

78

// Add lazy-loaded handler

79

addServerHandler({

80

route: "/api/heavy-computation",

81

handler: "~/server/api/heavy.ts",

82

lazy: true

83

});

84

85

// Development-only handler

86

addDevServerHandler({

87

route: "/api/dev/debug",

88

handler: "~/server/api/debug.ts",

89

method: "GET"

90

});

91

```

92

93

### Server Plugin System

94

95

Register server-side plugins for Nitro initialization and middleware.

96

97

```typescript { .api }

98

/**

99

* Add Nitro server plugin

100

* @param plugin - Plugin file path

101

*/

102

function addServerPlugin(plugin: string): void;

103

```

104

105

**Usage Examples:**

106

107

```typescript

108

import { addServerPlugin } from "@nuxt/kit";

109

110

// Add server initialization plugin

111

addServerPlugin("~/server/plugins/database.ts");

112

113

// Add authentication plugin

114

addServerPlugin("~/server/plugins/auth-setup.ts");

115

116

// Module adding server plugin

117

export default defineNuxtModule({

118

setup() {

119

addServerPlugin(resolve(runtimeDir, "server/plugin.mjs"));

120

}

121

});

122

```

123

124

### Nitro Instance Access

125

126

Access the Nitro server instance for advanced server configuration.

127

128

```typescript { .api }

129

/**

130

* Access Nitro instance (only available after 'ready' hook)

131

* @returns Nitro server instance

132

* @throws Error if called before Nitro is ready

133

*/

134

function useNitro(): Nitro;

135

136

interface Nitro {

137

/** Nitro options */

138

options: NitroOptions;

139

/** Storage layer */

140

storage: Storage;

141

/** Server hooks */

142

hooks: Hookable;

143

}

144

```

145

146

**Usage Examples:**

147

148

```typescript

149

import { useNitro } from "@nuxt/kit";

150

151

export default defineNuxtModule({

152

setup(options, nuxt) {

153

// Wait for Nitro to be ready

154

nuxt.hook("ready", async () => {

155

const nitro = useNitro();

156

157

// Access Nitro configuration

158

console.log("Nitro preset:", nitro.options.preset);

159

160

// Configure storage

161

nitro.storage.setDriver("custom", customStorageDriver);

162

163

// Add Nitro hooks

164

nitro.hooks.hook("render:response", (response) => {

165

response.headers["X-Custom-Header"] = "value";

166

});

167

});

168

}

169

});

170

```

171

172

### Prerendering Support

173

174

Configure routes for static generation and prerendering.

175

176

```typescript { .api }

177

/**

178

* Add routes to be prerendered

179

* @param routes - Route path(s) to prerender

180

*/

181

function addPrerenderRoutes(routes: string | string[]): void;

182

```

183

184

**Usage Examples:**

185

186

```typescript

187

import { addPrerenderRoutes } from "@nuxt/kit";

188

189

// Add static routes for prerendering

190

addPrerenderRoutes([

191

"/about",

192

"/contact",

193

"/privacy-policy"

194

]);

195

196

// Dynamic route prerendering

197

export default defineNuxtModule({

198

async setup() {

199

// Fetch dynamic routes

200

const posts = await fetchBlogPosts();

201

const routes = posts.map(post => `/blog/${post.slug}`);

202

203

addPrerenderRoutes(routes);

204

}

205

});

206

207

// Conditional prerendering

208

if (process.env.PRERENDER_BLOG === "true") {

209

addPrerenderRoutes("/blog/**");

210

}

211

```

212

213

### Server-Side Auto-Imports

214

215

Configure auto-imports specifically for server-side code.

216

217

```typescript { .api }

218

/**

219

* Add server-side auto-imports for Nitro

220

* @param imports - Import or array of imports to register

221

*/

222

function addServerImports(imports: Import | Import[]): void;

223

224

/**

225

* Add directories to be scanned for server auto-imports

226

* @param dirs - Directory path(s) to scan

227

* @param opts - Directory scanning options

228

*/

229

function addServerImportsDir(

230

dirs: string | string[],

231

opts?: { prepend?: boolean }

232

): void;

233

234

/**

235

* Add directories to be scanned by Nitro like ~/server

236

* @param dirs - Directory path(s) to scan

237

* @param opts - Directory scanning options

238

*/

239

function addServerScanDir(

240

dirs: string | string[],

241

opts?: { prepend?: boolean }

242

): void;

243

```

244

245

**Usage Examples:**

246

247

```typescript

248

import {

249

addServerImports,

250

addServerImportsDir,

251

addServerScanDir

252

} from "@nuxt/kit";

253

254

// Add server utility imports

255

addServerImports([

256

{ name: "validateRequest", from: "~/server/utils/validation" },

257

{ name: "useDatabase", from: "~/server/utils/database" }

258

]);

259

260

// Add server utils directory

261

addServerImportsDir("~/server/utils");

262

263

// Add custom server directories for scanning

264

addServerScanDir([

265

"~/server/custom-api",

266

"~/server/custom-middleware"

267

]);

268

```

269

270

### Advanced Nitro Configuration

271

272

Configure Nitro server options and behavior through modules.

273

274

**Server Handler Patterns:**

275

276

```typescript

277

import { addServerHandler } from "@nuxt/kit";

278

279

export default defineNuxtModule({

280

setup(options) {

281

// RESTful API handlers

282

addServerHandler({

283

route: "/api/users/:id",

284

method: "GET",

285

handler: "~/server/api/users/[id].get.ts"

286

});

287

288

addServerHandler({

289

route: "/api/users/:id",

290

method: "PUT",

291

handler: "~/server/api/users/[id].put.ts"

292

});

293

294

// Catch-all handler

295

addServerHandler({

296

route: "/api/proxy/**",

297

handler: "~/server/api/proxy.ts"

298

});

299

300

// WebSocket handler (if supported)

301

addServerHandler({

302

route: "/api/ws",

303

handler: "~/server/api/websocket.ts"

304

});

305

}

306

});

307

```

308

309

**Server Plugin Integration:**

310

311

```typescript

312

import { addServerPlugin, createResolver } from "@nuxt/kit";

313

314

export default defineNuxtModule({

315

setup() {

316

const resolver = createResolver(import.meta.url);

317

318

// Add server initialization

319

addServerPlugin(resolver.resolve("./runtime/server/init.mjs"));

320

321

// Add database connection

322

addServerPlugin(resolver.resolve("./runtime/server/database.mjs"));

323

}

324

});

325

```

326

327

**Nitro Hook Integration:**

328

329

```typescript

330

export default defineNuxtModule({

331

setup(options, nuxt) {

332

// Configure Nitro through Nuxt hooks

333

nuxt.hook('nitro:config', (nitroConfig) => {

334

nitroConfig.plugins = nitroConfig.plugins || [];

335

nitroConfig.plugins.push("~/server/plugins/custom.ts");

336

337

// Add custom Nitro configuration

338

nitroConfig.experimental = {

339

...nitroConfig.experimental,

340

wasm: true

341

};

342

});

343

344

// Add Nitro build hooks

345

nuxt.hook('nitro:build:before', (nitro) => {

346

console.log('Nitro build starting...');

347

});

348

}

349

});

350

```

351

352

**Server Storage Configuration:**

353

354

```typescript

355

export default defineNuxtModule({

356

setup(options, nuxt) {

357

nuxt.hook('nitro:config', (nitroConfig) => {

358

// Configure Redis storage

359

nitroConfig.storage = nitroConfig.storage || {};

360

nitroConfig.storage.redis = {

361

driver: 'redis',

362

host: process.env.REDIS_HOST,

363

port: process.env.REDIS_PORT,

364

password: process.env.REDIS_PASSWORD

365

};

366

367

// Configure file system storage

368

nitroConfig.storage.fs = {

369

driver: 'fs',

370

base: './data'

371

};

372

});

373

}

374

});

375

```

376

377

## Types

378

379

```typescript { .api }

380

interface NitroOptions {

381

/** Deployment preset */

382

preset?: string;

383

/** Server handlers */

384

handlers?: NitroEventHandler[];

385

/** Server plugins */

386

plugins?: string[];

387

/** Storage configuration */

388

storage?: Record<string, any>;

389

/** Experimental features */

390

experimental?: Record<string, any>;

391

[key: string]: any;

392

}

393

394

interface Storage {

395

/** Set storage driver */

396

setDriver(name: string, driver: any): void;

397

/** Get item from storage */

398

getItem(key: string): Promise<any>;

399

/** Set item in storage */

400

setItem(key: string, value: any): Promise<void>;

401

/** Remove item from storage */

402

removeItem(key: string): Promise<void>;

403

[key: string]: any;

404

}

405

406

interface Hookable {

407

/** Register hook */

408

hook<T>(name: string, fn: T): () => void;

409

/** Call hook */

410

callHook<T>(name: string, ...args: any[]): Promise<T>;

411

}

412

```