【nextjs strapi】如何统一封装 fetch 请求

news2024/11/17 15:56:35

在这里插入图片描述
在这里插入图片描述
前端 nextjs 接入 strapi 作为后端

如何封装请求呢

我们使用的是浏览器的 fetch

不用安装任何库

封装

frontend/src/app/[lang]/utils/fetch-api.tsx

import qs from "qs";
import { getStrapiURL } from "./api-helpers";

export async function fetchAPI(
  path: string,
  urlParamsObject = {},
  options = {}
) {
  try {
    // Merge default and user options
    const mergedOptions = {
      next: { revalidate: 60 },
      headers: {
        "Content-Type": "application/json",
      },
      ...options,
    };

    // Build request URL
    const queryString = qs.stringify(urlParamsObject);
    const requestUrl = `${getStrapiURL(
      `/api${path}${queryString ? `?${queryString}` : ""}`
    )}`;

    // Trigger API call
    const response = await fetch(requestUrl, mergedOptions);
    const data = await response.json();
    return data;
    
  } catch (error) {
    console.error(error);
    throw new Error(`Please check if your server is running and you set all the required tokens.`);
  }
}

getStrapiURL 的内容是这样的:

export function getStrapiURL(path = '') {
    return `${process.env.NEXT_PUBLIC_STRAPI_API_URL || 'http://localhost:1337'}${path}`;
}

如何调用

    const token = process.env.NEXT_PUBLIC_STRAPI_API_TOKEN;
      const path = `/articles`;
      const urlParamsObject = {
        sort: { createdAt: "desc" },
        populate: {
          cover: { fields: ["url"] },
          category: { populate: "*" },
          authorsBio: {
            populate: "*",
          },
        },
        pagination: {
          start: start,
          limit: limit,
        },
      };
      const options = { headers: { Authorization: `Bearer ${token}` } };
      const responseData = await fetchAPI(path, urlParamsObject, options);

      if (start === 0) {
        setData(responseData.data);
      } else {
        setData((prevData: any[] ) => [...prevData, ...responseData.data]);
      }

token 的话

token

可以在这里设置

在这里插入图片描述
给一些足够的权限就好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

混杂设备驱动、Linux内核中的中断、火焰传感器驱动、呼吸传感器驱动、等待队列

混杂设备驱动 混杂设备也叫杂项设备,是对普通的字符设备(struct cdev)的一种封装。misc 设备会自动创建cdev,不需要像我 们以前那样手动创建,因此采用misc 设备驱动可以简化字符设备驱动的编写。具有以下特点: 1) 主设备号为10&…

备战秋招60天算法挑战,Day25

题目链接: https://leetcode.cn/problems/combination-sum/ 视频题解: https://www.bilibili.com/video/BV1xyiueHEb4/ LeetCode 39. 组合总和 题目描述 给你一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以…

[ACP云计算]易错题(原题)

一、ECS 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 二、对象存储OSS 1、 2、 3、 4、 5、 6、 重点!!! 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 17、 18、 19、 20、 21、 22、 内容分发网络CDN 1、 2、 3、 4…

宝塔面板配置FTP服务并安装内网穿透实现无公网IP远程连接

文章目录 前言1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 前言 本文主要介绍宝塔FTP文件传输服务如何搭配内网穿透工具,实现随时随地远程连接局域网环境搭建的宝塔FTP文件服务并进行文件…

从虚拟化到容器化再到池化,AI算力的灵活调度技术研究

AI算力,触手可及 ©作者|坚果 来源|神州问学 引言 - AI时代下的算力变革 近年来,人工智能(AI)技术的快速发展极大地推动了各个领域的创新与进步。伴随着AI模型复杂度的不断提高以及数据量的爆炸式增长,对于高性…

厨帽检测算法样本算法模型和厨帽检测算法实际应用

厨帽检测算法是一种利用计算机视觉和深度学习技术来监控厨房工作人员是否佩戴规定的厨帽,以确保食品安全和卫生标准的遵守。以下是关于厨帽检测算法源码及其实际应用的详细阐述: 1. 算法实现 - 基于深度学习的对象识别:厨帽检测算法通常采用…

2024年【安全生产监管人员】考试试卷及安全生产监管人员复审考试

题库来源:安全生产模拟考试一点通公众号小程序 安全生产监管人员考试试卷根据新安全生产监管人员考试大纲要求,安全生产模拟考试一点通将安全生产监管人员模拟考试试题进行汇编,组成一套安全生产监管人员全真模拟考试试题,学员可…

全球高增速电商市场有哪些?这些市场上主流电商平台又有哪些呢?

跨境电商风起云涌,当欧美市场步入存量竞争,单量的大幅下滑成为广大卖家的普遍痛点。然鹅,有一些市场却频频传来爆单喜讯,我们一起来了解一下—— 全球高增速电商市场有哪些? 首先,在全球电商增速最快的国家…

【UE5】UMG C++父类绑定蓝图子类属性

有时我们在设计UMG时可能会使用到C父类来处理一些通用逻辑,如果我们想要在C父类中获取其派生子类的某个属性,如Image或Button等,我们可以通过使用UE提供的BindWidget元数据标签的方式来获取。 BindWidget BindWidget元数据标签在官方文档中…

【C++指南】类和对象(一):类和对象的定义和使用 基础讲解

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言 文章思路 一、类的定义 1.类的定义 2.类的访问限定符 3.class与struct的使用区别 4.类域…

topo组态引入-记录

一、目录(vue-router映射到下面的index.vue界面) (自己记录,别下载不用看)

Prometheus:alertmanager实战分组、抑制、静默

1 项目目标 (1)熟练部署alertmanager (2)熟练整合alertmanagerPrometheus (3)熟练alertmanager分组、抑制、静默 2 项目准备 2.1 规划节点 主机名 主机IP 节点规划 prome-master01 10.0.1.10 服务…

Graylog日志丢失解决方案

问题描述 目前公司使用的日志方案是Graylog5.0版本,当接入的日志并发多时,就会出现日志丢失的情况。 目前硬件系统centos7.9 内核5.16.13。一台graylog和一台es服务器。 两台机器硬件配置 graylog CPU 36C 内存 150G 系统硬盘 500G (固态&…

盘点15款主流的项目管理软件,优缺点一目了然!

本文将盘点对15款主流的项目管理软件进行盘点: 简道云、Worktile、Teambition、Tower、泛微 e-office、用友项目管理软件、金蝶云星瀚项目管理、腾讯 TAPD、Asana、Trello、Jira、Basecamp、Monday.com、Wrike、Smartsheet。 在现代企业的运营中,项目管理…

uniapp,uview:inputnumber或者input,当type为number的时候,在ios里输入不了小数的问题

项目场景: 在做uniapp的H5页面时,有个需求是要输入框要能支持可以保留两位小数输入,不能输入负数和其他字符。心想这简单,直接用uview的inputnumber组件这不就好了,结果测试提bug说不能输入小数点,我心想我…

基于Hadoop+Zookeeper+Hive+HBase+Echarts的地区旅游大数据可视化管理系统设计与实现

绪论 研究背景 当今时代信息资源日益丰富大量,信息资源的利用对社会的发展起着主要作用,运用信息技术协助产业设计越来越成为行业发展的重要趋势。 旅游产业是典型的体验服务产业,在任何发展阶段,信息反馈的准确性与及时性都具…

【表格】EEG作为脑成像工具的分析与应用

EEG作为脑成像工具的分析与应用 【表格】EEG空间分析方法与应用 方法/应用描述关键点示例/公式备注全局场功率(GFP)量化头皮电位场的强度 G F P σ ( V t ) GFP \sigma(V_t) GFPσ(Vt​) 其中 V t V_t Vt​为t时刻各电极电压无具体公式,为标准差计算提供对同步活…

C和C++中数组的不同

本文选自公众号文章: https://mp.weixin.qq.com/s/xyUMWTyEu7-Uws8Zfxifpghttps://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxcheckurl?requrlhttps%3A%2F%2Fmp.weixin.qq.com%2Fs%2FxyUMWTyEu7-Uws8Zfxifpg&skey%40crypt_963c540a_c8e6882f00ef27f0c27a8357dea50…

了解Redis数据持久化(下)

4.AOF 写后日志,避免宕机数据丢失 4.1 AOF说明 AOF日志存储的是Redis服务器的顺序指令序列只记录对内存进行修改的指令append-only file(AOF)AOF主要是主线程在执行,将日志写入磁盘的过程中,如果磁盘压力太大&#x…

USB3.2 摘录(九)

系列文章目录 USB3.2 摘录(一) USB3.2 摘录(二) USB3.2 摘录(三) USB3.2 摘录(四) USB3.2 摘录(五) USB3.2 摘录(六) USB3.2 摘录&…