Lzh on GitHub

请求(Fetch)

Nitro 提供了一个内置的 Fetch API,可用于从服务器端点或其他来源获取数据。它建立在 unjs/ofetch 之上。

用法

在您的处理程序中,您只需调用 $fetch 函数即可发出请求。响应将自动解析。

Router Handler
export default defineEventHandler(async (event) => {
  const data = await $fetch('https://ungh.cc/orgs/unjs/repos')

  return data
})

您可以向 $fetch 函数传递一个泛型类型以获得更好的类型推断。

Router Handler
import { Repo } from '~/types'

export default defineEventHandler(async (event) => {
  const data = await $fetch<Repo[]>('https://ungh.cc/orgs/unjs/repos')

  return data
})

您可以向 $fetch 函数传递许多选项,例如方法、请求头、请求体、查询等。

Router Handler
import { Repo } from '~/types'

export default defineEventHandler(async (event) => {
  const data = await $fetch<Repo[]>('https://api.github.com/markdown', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: {
      text: 'Hello **world**!'
    }
  })

  return data
})

有关 $fetch 函数用法的更多信息,请参阅 unjs/ofetch 文档。

服务器内部获取

您还可以使用 $fetch 函数向其他处理程序发出内部请求。

Router Handler
export default defineEventHandler(async (event) => {
  const data = await $fetch('/api/users')

  return data
})

实际上,不会发出任何 Fetch 请求,而是直接调用处理程序,这得益于 unjs/unenv。这有助于避免 HTTP 请求开销。