format: apply repo prettier (3.8.1) to the folded skills tree
963 markdown files reformatted with the repository's pinned prettier so pnpm format:check covers the folded tree like every other repo file. The formatter's embedded-language pass also normalized code fences (TS semicolons, closed HTML tags in examples, lowercased CSS hex colors, one renumbered list that skipped an index). Alphanumeric token deltas vs the fold commit were audited file-by-file; all are formatter-equivalent markup normalizations plus the four sanitized skills.
This commit is contained in:
@@ -14,8 +14,8 @@ Create files in `server/api/` directory:
|
||||
```ts
|
||||
// server/api/hello.ts
|
||||
export default defineEventHandler((event) => {
|
||||
return { message: 'Hello World' }
|
||||
})
|
||||
return { message: 'Hello World' };
|
||||
});
|
||||
```
|
||||
|
||||
Access at `/api/hello`.
|
||||
@@ -25,27 +25,27 @@ Access at `/api/hello`.
|
||||
```ts
|
||||
// server/api/users.get.ts - GET /api/users
|
||||
export default defineEventHandler(() => {
|
||||
return getUsers()
|
||||
})
|
||||
return getUsers();
|
||||
});
|
||||
|
||||
// server/api/users.post.ts - POST /api/users
|
||||
export default defineEventHandler(async (event) => {
|
||||
const body = await readBody(event)
|
||||
return createUser(body)
|
||||
})
|
||||
const body = await readBody(event);
|
||||
return createUser(body);
|
||||
});
|
||||
|
||||
// server/api/users/[id].put.ts - PUT /api/users/:id
|
||||
export default defineEventHandler(async (event) => {
|
||||
const id = getRouterParam(event, 'id')
|
||||
const body = await readBody(event)
|
||||
return updateUser(id, body)
|
||||
})
|
||||
const id = getRouterParam(event, 'id');
|
||||
const body = await readBody(event);
|
||||
return updateUser(id, body);
|
||||
});
|
||||
|
||||
// server/api/users/[id].delete.ts - DELETE /api/users/:id
|
||||
export default defineEventHandler((event) => {
|
||||
const id = getRouterParam(event, 'id')
|
||||
return deleteUser(id)
|
||||
})
|
||||
const id = getRouterParam(event, 'id');
|
||||
return deleteUser(id);
|
||||
});
|
||||
```
|
||||
|
||||
### Route Parameters
|
||||
@@ -53,15 +53,15 @@ export default defineEventHandler((event) => {
|
||||
```ts
|
||||
// server/api/posts/[id].ts
|
||||
export default defineEventHandler((event) => {
|
||||
const id = getRouterParam(event, 'id')
|
||||
return getPost(id)
|
||||
})
|
||||
const id = getRouterParam(event, 'id');
|
||||
return getPost(id);
|
||||
});
|
||||
|
||||
// Catch-all: server/api/[...path].ts
|
||||
export default defineEventHandler((event) => {
|
||||
const path = getRouterParam(event, 'path')
|
||||
return { path }
|
||||
})
|
||||
const path = getRouterParam(event, 'path');
|
||||
return { path };
|
||||
});
|
||||
```
|
||||
|
||||
### Query Parameters
|
||||
@@ -70,10 +70,10 @@ export default defineEventHandler((event) => {
|
||||
// server/api/search.ts
|
||||
// GET /api/search?q=nuxt&page=1
|
||||
export default defineEventHandler((event) => {
|
||||
const query = getQuery(event)
|
||||
const query = getQuery(event);
|
||||
// { q: 'nuxt', page: '1' }
|
||||
return search(query.q, Number(query.page))
|
||||
})
|
||||
return search(query.q, Number(query.page));
|
||||
});
|
||||
```
|
||||
|
||||
### Request Body
|
||||
@@ -81,10 +81,10 @@ export default defineEventHandler((event) => {
|
||||
```ts
|
||||
// server/api/submit.post.ts
|
||||
export default defineEventHandler(async (event) => {
|
||||
const body = await readBody(event)
|
||||
const body = await readBody(event);
|
||||
// Validate and process body
|
||||
return { success: true, data: body }
|
||||
})
|
||||
return { success: true, data: body };
|
||||
});
|
||||
```
|
||||
|
||||
### Headers and Cookies
|
||||
@@ -93,24 +93,24 @@ export default defineEventHandler(async (event) => {
|
||||
// server/api/auth.ts
|
||||
export default defineEventHandler((event) => {
|
||||
// Read headers
|
||||
const auth = getHeader(event, 'authorization')
|
||||
const auth = getHeader(event, 'authorization');
|
||||
|
||||
// Read cookies
|
||||
const cookies = parseCookies(event)
|
||||
const token = getCookie(event, 'token')
|
||||
const cookies = parseCookies(event);
|
||||
const token = getCookie(event, 'token');
|
||||
|
||||
// Set headers
|
||||
setHeader(event, 'X-Custom-Header', 'value')
|
||||
setHeader(event, 'X-Custom-Header', 'value');
|
||||
|
||||
// Set cookies
|
||||
setCookie(event, 'token', 'new-token', {
|
||||
httpOnly: true,
|
||||
secure: true,
|
||||
maxAge: 60 * 60 * 24, // 1 day
|
||||
})
|
||||
});
|
||||
|
||||
return { authenticated: !!token }
|
||||
})
|
||||
return { authenticated: !!token };
|
||||
});
|
||||
```
|
||||
|
||||
## Server Middleware
|
||||
@@ -120,16 +120,16 @@ Runs on every request before routes:
|
||||
```ts
|
||||
// server/middleware/auth.ts
|
||||
export default defineEventHandler((event) => {
|
||||
const token = getCookie(event, 'token')
|
||||
const token = getCookie(event, 'token');
|
||||
|
||||
// Attach data to event context
|
||||
event.context.user = token ? verifyToken(token) : null
|
||||
})
|
||||
event.context.user = token ? verifyToken(token) : null;
|
||||
});
|
||||
|
||||
// server/middleware/log.ts
|
||||
export default defineEventHandler((event) => {
|
||||
console.log(`${event.method} ${event.path}`)
|
||||
})
|
||||
console.log(`${event.method} ${event.path}`);
|
||||
});
|
||||
```
|
||||
|
||||
Access context in routes:
|
||||
@@ -137,12 +137,12 @@ Access context in routes:
|
||||
```ts
|
||||
// server/api/profile.ts
|
||||
export default defineEventHandler((event) => {
|
||||
const user = event.context.user
|
||||
const user = event.context.user;
|
||||
if (!user) {
|
||||
throw createError({ statusCode: 401, message: 'Unauthorized' })
|
||||
throw createError({ statusCode: 401, message: 'Unauthorized' });
|
||||
}
|
||||
return user
|
||||
})
|
||||
return user;
|
||||
});
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
@@ -150,18 +150,18 @@ export default defineEventHandler((event) => {
|
||||
```ts
|
||||
// server/api/users/[id].ts
|
||||
export default defineEventHandler((event) => {
|
||||
const id = getRouterParam(event, 'id')
|
||||
const user = findUser(id)
|
||||
const id = getRouterParam(event, 'id');
|
||||
const user = findUser(id);
|
||||
|
||||
if (!user) {
|
||||
throw createError({
|
||||
statusCode: 404,
|
||||
statusMessage: 'User not found',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
return user
|
||||
})
|
||||
return user;
|
||||
});
|
||||
```
|
||||
|
||||
## Server Utils
|
||||
@@ -171,16 +171,16 @@ Auto-imported in `server/utils/`:
|
||||
```ts
|
||||
// server/utils/db.ts
|
||||
export function useDb() {
|
||||
return createDbConnection()
|
||||
return createDbConnection();
|
||||
}
|
||||
```
|
||||
|
||||
```ts
|
||||
// server/api/users.ts
|
||||
export default defineEventHandler(() => {
|
||||
const db = useDb() // Auto-imported
|
||||
return db.query('SELECT * FROM users')
|
||||
})
|
||||
const db = useDb(); // Auto-imported
|
||||
return db.query('SELECT * FROM users');
|
||||
});
|
||||
```
|
||||
|
||||
## Server Plugins
|
||||
@@ -191,13 +191,13 @@ Run once when server starts:
|
||||
// server/plugins/db.ts
|
||||
export default defineNitroPlugin((nitroApp) => {
|
||||
// Initialize database connection
|
||||
const db = createDbConnection()
|
||||
const db = createDbConnection();
|
||||
|
||||
// Add to context
|
||||
nitroApp.hooks.hook('request', (event) => {
|
||||
event.context.db = db
|
||||
})
|
||||
})
|
||||
event.context.db = db;
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
## Streaming Responses
|
||||
@@ -205,22 +205,22 @@ export default defineNitroPlugin((nitroApp) => {
|
||||
```ts
|
||||
// server/api/stream.ts
|
||||
export default defineEventHandler((event) => {
|
||||
setHeader(event, 'Content-Type', 'text/event-stream')
|
||||
setHeader(event, 'Cache-Control', 'no-cache')
|
||||
setHeader(event, 'Connection', 'keep-alive')
|
||||
setHeader(event, 'Content-Type', 'text/event-stream');
|
||||
setHeader(event, 'Cache-Control', 'no-cache');
|
||||
setHeader(event, 'Connection', 'keep-alive');
|
||||
|
||||
const stream = new ReadableStream({
|
||||
async start(controller) {
|
||||
for (let i = 0; i < 10; i++) {
|
||||
controller.enqueue(`data: ${JSON.stringify({ count: i })}\n\n`)
|
||||
await new Promise(r => setTimeout(r, 1000))
|
||||
controller.enqueue(`data: ${JSON.stringify({ count: i })}\n\n`);
|
||||
await new Promise((r) => setTimeout(r, 1000));
|
||||
}
|
||||
controller.close()
|
||||
controller.close();
|
||||
},
|
||||
})
|
||||
});
|
||||
|
||||
return stream
|
||||
})
|
||||
return stream;
|
||||
});
|
||||
```
|
||||
|
||||
## Server Storage
|
||||
@@ -230,16 +230,16 @@ Key-value storage with multiple drivers:
|
||||
```ts
|
||||
// server/api/cache.ts
|
||||
export default defineEventHandler(async (event) => {
|
||||
const storage = useStorage()
|
||||
const storage = useStorage();
|
||||
|
||||
// Set value
|
||||
await storage.setItem('key', { data: 'value' })
|
||||
await storage.setItem('key', { data: 'value' });
|
||||
|
||||
// Get value
|
||||
const data = await storage.getItem('key')
|
||||
const data = await storage.getItem('key');
|
||||
|
||||
return data
|
||||
})
|
||||
return data;
|
||||
});
|
||||
```
|
||||
|
||||
Configure storage drivers in `nuxt.config.ts`:
|
||||
@@ -254,10 +254,10 @@ export default defineNuxtConfig({
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
});
|
||||
```
|
||||
|
||||
<!--
|
||||
<!--
|
||||
Source references:
|
||||
- https://nuxt.com/docs/getting-started/server
|
||||
- https://nuxt.com/docs/directory-structure/server
|
||||
|
||||
Reference in New Issue
Block a user