Nuxt3 SSR 每个文件有多个路由?

问题描述 投票:0回答:1

我正在使用 Nuxt3、Vue3 和 Laravel 后端开发一个带有 SSR 的新应用程序。我想知道是否有一种方法可以将多个路由/api 调用添加到每个服务器/api 文件中的一个 defineEventHandler 函数。也许这不是好的做法?这是我到目前为止所拥有的:

server/api/backend.js

    export default defineEventHandler(async (event) =>{

      const { rcn } = getQuery(event)

      const config = useRuntimeConfig()

      const uri  = `${config.apiBase}/api/${rcn}`
      const data = await $fetch(uri)
      return data
   })

我想我可以根据

event.req.url
中的内容做 if/else 语句,但这看起来很乏味。同样,如果正确的设置方法是为每条路线创建一个新的 file.js,请告诉我。似乎应该有更好的方法将它们组合在一起?

vue.js nuxt.js vuejs3 server-side-rendering nuxt3
1个回答
0
投票

我认为你想要实现的是捕获所有路线(见文档

用法:

~/server/api/all-routes/[...].ts

import { createRouter, defineEventHandler, useBase } from 'h3';
const router = createRouter();

router.get(
  '/hello',
  defineEventHandler((event) => {
    return 'Hello from hello API';
  })
);
router.get(
  '/world',
  defineEventHandler((event) => {
    return 'World from World API';
  })
);

export default useBase('/api/all-routes/', router.handler);

注:

确保你的 catch all routes 文件中有这个。否则,它不会工作。

export default useBase('/api/all-routes/', router.handler);

router.get('/api/')
- 用于 GET 方法

router.post('/api/')
- 用于 POST 方法

另外两个用于

update
&
delete

在客户端调用API。

<script setup>
const { data: hello } = await useFetch('/api/all-routes/hello');
const { data: world } = await useFetch('/api/all-routes/world');
</script>
<template>
  <div>
    <div>
      {{ hello }}
    </div>
    <div>
      {{ world }}
    </div>
  </div>
</template>

查看工作示例 https://stackblitz.com/edit/nuxt-starter-7we3jp?file=server/api/all-routes/[...].ts

© www.soinside.com 2019 - 2024. All rights reserved.