当前位置: 首页 > news >正文

next,react封装axios,http请求

import axios from 'axios';//声明一个基础接口变量1
let base_url;
//配置开发环境
if (process.env.NODE_ENV === 'development') {base_url = "http://127.0.0.1/";
}
// 配置生产环境
if (process.env.NODE_ENV === 'production') {base_url = "http://127.0.0.1/";
}
axios.defaults.baseURL = base_url;// 辅助函数:安全获取localStorage值,检测window
const getLocalStorage = () => {if (typeof window !== 'undefined') {return true;}return false;};
// 发送请求前拦载
axios.interceptors.request.use((config) => {var urlsa = config.url;var t = Date.parse(new Date()) / 1000;//时间戳if (urlsa.indexOf("?") != -1) {config.url = config.url + "&datest=" + t} else {config.url = config.url + "?datest=" + t}// 给post请求加参数if (config.data) {// 如果原本请求已经有数据(比如是JSON格式数据等情况)config.data = {...config.data,url: base_url};} else {// 如果原本请求没有数据,创建一个新的对象添加token参数config.data = { url: base_url };}if (getLocalStorage()) {config.headers.token = window.localStorage.getItem("token") ? window.localStorage.getItem("token") : "";config.headers.user = encodeURIComponent(window.localStorage.getItem("username"));}return config
}, (error) => {return Promise.reject(error)
})//发送请求返回拦载
axios.interceptors.response.use(function (response) {// 对响应数据做点什么var data = response.data;//console.log("打印请求回来")if (data.code == 2006) {if (getLocalStorage()) {window.localStorage.clear('username');//删除window.localStorage.clear('token');//删除//配置开发环境if (process.env.NODE_ENV === 'development') {window.location.href = "/login";}// 配置生产环境if (process.env.NODE_ENV === 'production') {window.location.href = "/login";}}return false;}return response;
},function (error) {return Promise.reject(error);// return false;}
);/**
* 封装的请求基类方法
* @param url 地址
* @param method 请求类型
* @param headers 头部信息
* @param data 数据(post用)
* @param params 数据(get用)
* @param success 成功返回
* @param error 失败返回
* @constructor
*/
axios.Request = function ({ url, method = "GET", data = {}, params = {}, success, error }) {let headers = '';if (method == "GET" || method == "get") {headers = 'Content-Type: application/json';} else {headers = 'Content-Type: application/x-www-form-urlencoded';}axios({url: url,headers: headers,method: method,data: data,params: params,}).then(res => {typeof success === "function" && success(res.data);}).catch(e => {typeof error === "function" && error(e);})
}/**
* get封装请求
* @param url 地址
* @param data 数据
* @param success 成功返回
* @param error 失败返回
*/
axios.getRequest = function ({ url, data }, success, error) {axios.Request({ url, method: "GET", params: data, success, error })
}/**
* post请求
* @param url 地址
* @param data 数据
* @param success 成功返回
* @param error 失败返回
*/
axios.postRequest = function ({ url, data }, success, error) {axios.Request({ url, method: "POST", data: data, success, error })
}export default axios;

使用

// use client表示客户端
"use client";
import http from '@/app/comm/http.js';http.post('/dadedadedade666',{id:121}).then((res) => {})
// app/dashboard/layout.tsx
export default function IndexLayout({ children }) {return (<div>{/* 仪表盘专属导航 */}<nav>后台导航</nav>{children} {/* 渲染 /dashboard/users 等子路由内容 */}</div>);
}

相关文章:

  • react 常见的闭包陷阱深入解析
  • 2025 cs144 Lab Checkpoint 3: TCP Receiver
  • React 列表 Keys
  • 【React】useId
  • Python打卡训练营day46——2025.06.06
  • Linux 服务管理与自启动配置全解析:rc.d、systemctl与service对比
  • Jpackage
  • vue-print-nb 打印相关问题
  • vue+elementUI+springboot实现文件合并前端展示文件类型
  • 2025年,百度智能云打响AI落地升维战
  • K7 系列各种PCIE IP核的对比
  • 车牌识别技术解决方案
  • Charles 全流程指南:安装、设置、抓包与注意事项
  • html表格转换为markdown
  • C++ 基础特性深度解析
  • 【数据结构与算法】 二分查找
  • 深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
  • 大故障:阿里云核心域名爆炸了
  • 从 Revit 到 3DTiles:GISBox RVT 切片器如何让建筑图元在 Web 端展示
  • MiniExcel模板填充Excel导出
  • 广州开发网站建设/营销推广网站推广方案
  • 做房地产网站广告销售/关键词搜索技巧
  • 哪里去找做的好看的网站/国内新闻最新消息今天简短
  • 施工企业市场调查目的与主题主要有()。/seo公司怎么推广宣传
  • wordpress前端怎么写/优化生育政策
  • 企业网站seo报价/广州婚恋网站排名