Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 11 additions & 13 deletions apps/content/docs/adapters/nuxt.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: Use oRPC inside an Nuxt.js project

# Nuxt.js Adapter

[Nuxt.js](https://nuxtjs.org/) is a popular Vue.js framework for building server-side applications. It built on top of [Nitro](https://nitro.build/) server a lightweight, high-performance Node.js runtime. For more details, see the [HTTP Adapter](/docs/adapters/http) guide.
[Nuxt.js](https://nuxt.com/) is a popular Vue.js framework for building server-side applications. For more details, see the [HTTP Adapter](/docs/adapters/http) guide.

## Server

Expand All @@ -14,22 +14,20 @@ You set up an oRPC server inside Nuxt using its [Server Routes](https://nuxt.com
::: code-group

```ts [server/routes/rpc/[...].ts]
import { RPCHandler } from '@orpc/server/node'
import { RPCHandler } from '@orpc/server/fetch'

Comment thread
dinwwwh marked this conversation as resolved.
const handler = new RPCHandler(router)

export default defineEventHandler(async (event) => {
const { matched } = await handler.handle(
event.node.req,
event.node.res,
{
prefix: '/rpc',
context: {}, // Provide initial context if needed
}
)

if (matched) {
return
const request = toWebRequest(event)

const { response } = await handler.handle(request, {
prefix: '/rpc',
context: {}, // Provide initial context if needed
})

if (response) {
return response
}

setResponseStatus(event, 404, 'Not Found')
Expand Down
10 changes: 6 additions & 4 deletions playgrounds/nuxt/server/routes/api/[...].ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { OpenAPIHandler } from '@orpc/openapi/node'
import { OpenAPIHandler } from '@orpc/openapi/fetch'
import { onError } from '@orpc/server'
import { ZodToJsonSchemaConverter } from '@orpc/zod/zod4'
import { experimental_SmartCoercionPlugin as SmartCoercionPlugin } from '@orpc/json-schema'
Expand Down Expand Up @@ -63,18 +63,20 @@ const openAPIHandler = new OpenAPIHandler(router, {
})

export default defineEventHandler(async (event) => {
const request = toWebRequest(event)

const authorization = getHeader(event, 'authorization')
const context = authorization
? { user: { id: 'test', name: 'John Doe', email: 'john@doe.com' } }
: {}

const { matched } = await openAPIHandler.handle(event.node.req, event.node.res, {
const { response } = await openAPIHandler.handle(request, {
prefix: '/api',
context,
})

if (matched) {
return
if (response) {
return response
}

setResponseStatus(event, 404, 'Not Found')
Expand Down
10 changes: 6 additions & 4 deletions playgrounds/nuxt/server/routes/rpc/[...].ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { onError } from '@orpc/server'
import { RPCHandler } from '@orpc/server/node'
import { RPCHandler } from '@orpc/server/fetch'
import { router } from '~/server/routers'

const rpcHandler = new RPCHandler(router, {
Expand All @@ -11,15 +11,17 @@ const rpcHandler = new RPCHandler(router, {
})

export default defineEventHandler(async (event) => {
const request = toWebRequest(event)

const context = { user: { id: 'test', name: 'John Doe', email: 'john@doe.com' } }

const { matched } = await rpcHandler.handle(event.node.req, event.node.res, {
const { response } = await rpcHandler.handle(request, {
prefix: '/rpc',
context,
})

if (matched) {
return
if (response) {
return response
}

setResponseStatus(event, 404, 'Not Found')
Expand Down
Loading