我似乎找到Nuxt3中最优雅的请求方式....

3,656 阅读2分钟

我从CSR转变到SSR过程中,让我耗时最多的环节,是网络请求...

我查阅了各种教程,大部分教程都在请求自己的服务端。我想说,后端同学已经写好了N个接口,难道我就要写N个服务端接口,然后客户端又写N个接口调自己的服务端接口吗。兄弟看下去,这篇文章教你更优雅的请求方式。

网络请求中,如果你跟我一样有以下困扰

  • 各种教程都在请求自己写的/server/api下面的接口,拜托我又不是搞全栈。
  • 我们公司有后端提供接口,能不能请求转发直接调。
  • 我配置请求转发之后本地是成功了,但是线上又不行了。
  • 或者我根本不会配请求转发,直接就跨域。
  • 我这样配了之后还能保证服务端渲染吗。

利用Nuxt3中的混合渲染就能轻松搞定

  • 从Nuxt3开始随着公测 rc.12版本 发布,支持路由规则和 混合渲染。务必在使用这个配置前需要将版本更新至 rc.12版本 或最高版本!
  • 使用路由规则,您可以为一组nuxt路由定义规则,改变呈现模式或分配基于路由的缓存策略!
  • 使用混合渲染,你可以使用 Route Rules 允许每个路由使用不同的缓存规则,并决定服务器应如何响应给定 URL 上的新请求。
1、在nuxt.config.ts中添加以下配置
export default defineNuxtConfig({
  routeRules: {
    // 针对路径进行接口转发
    '/dev-api/**': {
     // https://cnodejs.org/api/v1 是个公共接口api前缀,将其替换为后端写好的接口调用地址就好
      proxy: `https://cnodejs.org/api/v1/**` 
    },
  }
})
2、在业务层或者封装好的网络请求工具类中调用 useFetch() ,同时设置baseURL为 /dev-api

需要注意的是,使用useFetch才能有水合作用

 // 业务代码中 /pages/home/index
<template>
  <div>
    <button @click="getInfo">
      获取一个请求吧
    </button>
    <div>
      {{ info?.title }}
    </div>
  </div>
</template>
<script setup>
const info = ref();
const getInfo = async () => {
  // 模拟请求一个真实的网络内容
  const { data, error } = await useFetch("/topic/5433d5e4e737cbe96dcef312", {
    baseURL: "/dev-api",
  });
  info.value = data.value.data;
};
getInfo();
</script>

3、pnpm run dev 运行程序
image.png ___ image.png

项目链接

文章项目源码
文章对应网址链接
我的所有项目案例链接

特别鸣谢

我想藏在罐头里提供的最低版本要求说明