62 lines
1.1 KiB
TypeScript
62 lines
1.1 KiB
TypeScript
import { Elysia, t } from 'elysia'
|
|
|
|
const app = new Elysia()
|
|
.model({
|
|
name: t.Object({
|
|
name: t.String()
|
|
}),
|
|
b: t.Object({
|
|
response: t.Number()
|
|
}),
|
|
authorization: t.Object({
|
|
authorization: t.String()
|
|
})
|
|
})
|
|
// Strictly validate response
|
|
.get('/', () => 'hi')
|
|
// Strictly validate body and response
|
|
.post('/', ({ body, query }) => body.id, {
|
|
body: t.Object({
|
|
id: t.Number(),
|
|
username: t.String(),
|
|
profile: t.Object({
|
|
name: t.String()
|
|
})
|
|
})
|
|
})
|
|
// Strictly validate query, params, and body
|
|
.get('/query/:id', ({ query: { name }, params }) => name, {
|
|
query: t.Object({
|
|
name: t.String()
|
|
}),
|
|
params: t.Object({
|
|
id: t.String()
|
|
}),
|
|
response: {
|
|
200: t.String(),
|
|
300: t.Object({
|
|
error: t.String()
|
|
})
|
|
}
|
|
})
|
|
.guard(
|
|
{
|
|
headers: 'authorization'
|
|
},
|
|
(app) =>
|
|
app
|
|
.derive(({ headers }) => ({
|
|
userId: headers.authorization
|
|
}))
|
|
.get('/', ({ userId }) => 'A')
|
|
.post('/id/:id', ({ query, body, params, userId }) => body, {
|
|
params: t.Object({
|
|
id: t.Number()
|
|
}),
|
|
transform({ params }) {
|
|
params.id = +params.id
|
|
}
|
|
})
|
|
)
|
|
.listen(3000)
|