前端如何使用后端提供的接口拿数据,文件配置及详细使用

目录

一、封装本地存储操作模块

新建文件src\utils\storage.js封装操作token的方法

二、vuex处理用户登陆后的token值

新建文件:src\store\index.js

安装导入:npm install vuex

三、封装 axios 请求模块

下载导入:npm install axios

四、在main.js文件内全局注册store、axios

五、新建api文件夹,存放接口文件

六、在组件页面内调接口拿数据

接口使用例子1

1. 登录接口的使用(同注册),在页面导入接口

2. 通过async await 来拿到用户输入的值,根据返回结果进行判断返回相应提示

接口使用例子2

1. 通过接口获取数据进行渲染,这里把需要的接口解构出来

2. data定义需要渲染的数据(可与后端字段一致)

3. 在方法里面调用接口,把拿到的数据放到一个自己定义的数组里面list

4. 通过v-for渲染获取到的数据


一、封装本地存储操作模块

新建文件src\utils\storage.js封装操作token的方法

/* 存储数据 */
export const setItem = (key, value) => {
  // 将数组、对象类型的数据转换为 JSON 格式字符串进行存储
  if (typeof value === "object") {
    value = JSON.stringify(value);
  }
  window.localStorage.setItem(key, value);
};

/* 获取数据 */
export const getItem = (key) => {
  const data = window.localStorage.getItem(key);
  try {
    return JSON.parse(data);
  } catch (err) {
    return data;
  }
};

/* 删除数据 */
export const removeItem = (key) => {
  window.localStorage.removeItem(key);
};

二、vuex处理用户登陆后的token值

新建文件:src\store\index.js

安装导入:npm install vuex

import Vue from "vue";
import Vuex from "vuex";
// 加载storage模块:获取token,存储token
import { getItem, setItem } from "@/utils/storage";

Vue.use(Vuex);
// 用户登陆后的token值
const TOKEN_KEY = "X-Token";

export default new Vuex.Store({
  // 处理用户 Token,定义容器当中数据
  state: {
    // 用户的登录状态信息,存储当前登录用户信息(token等数据)
    // 1. user: null
    // 2. user: JSON.parse(window.localStorage.getItem(TOKEN_KEY))
    user: getItem(TOKEN_KEY),
  },
  mutations: {
    setUser(state, data) {
      state.user = data;
      // 为了防止刷新丢失,我们需要把数据备份到本地存储
      // window.localStorage.setItem(TOKEN_KEY, JSON.stringify(state.user))
      setItem(TOKEN_KEY, state.user);
    },
  },
  actions: {},
  modules: {},
});

三、封装 axios 请求模块

下载导入:npm install axios

// 封装 axios 请求模块
import axios from "axios";
import router from "@/router";

// axios.create 方法创建一个axios的实例
const request = axios.create({
  baseURL: "/localhost", // 接口的基准路径,改成自己的项目基地址
});

// 请求拦截器:是否注入token
request.interceptors.request.use(
  function (config) {
    return config;
  },
  function (error) {
    return Promise.reject(error);
  }
);
// store文件中vuex和localstorage对token进行处理之后响应拦截器中统一处理 token 过期
// 处理流程:在axios拦截器中加入token刷新逻辑;用户token过期时,向服务器请求新的 token;旧token替换为新token;然后继续用户当前的请求
// 响应拦截器
request.interceptors.response.use(
  function (response) {
    return response;
  },
  async function (error) {
    console.dir(error);
    if (error.response && error.response.status === 401) {
      // 校验是否有 refresh_token
      const user = store.state.user;
      if (!user || !user.refresh_token) {
        router.push("/login");
        return;
      }
      // 如果有refresh_token,则请求获取新的 token
      try {
        const res = await axios({
          method: "PUT",
          url: "/admin/waterMeter/login", // 改成自己的项目的登录地址
          headers: {
            Authorization: `Bearer ${user.refresh_token}`,
          },
        });

        // 如果获取成功,则把新的 token 更新到容器中
        console.log("刷新 token  成功", res);
        store.commit("setUser", {
          token: res.data.data.token, // 最新获取的可用 token
          refresh_token: user.refresh_token, // 还是原来的 refresh_token
        });
        return request(error.config);
      } catch (err) {
        // 如果获取失败,直接跳转 登录页
        console.log("请求刷线 token 失败", err);
        router.push("/login");
      }
    }

    return Promise.reject(error);
  }
);

export default request;

四、在main.js文件内全局注册store、axios

import Vue from "vue";
import App from "./App.vue";
import router from "./router"; // 路由对象
import store from "./store"; // 管理用户token
import axios from "axios";

... ...

new Vue({
  router,
  store,
  render: (h) => h(App),
}).$mount("#app");

五、新建api文件夹,存放接口文件

// 存储接口封装,用户相关的请求模块
import request from "@/utils/request.js";

// export const login = (user) => {
//   return request({
//     url: '', // 接口地址
//     method: 'POST', 'GET', // 请求方式
//     // 如果参数通过请求体来发(post),用data是请求体参数
//     // 如果参数通过请求行来发(get),用params是路径参数
//     data: user
//   })
// }

// 用户登录
export const login = (data) => {
  return request({
    method: "POST",
    url: "/admin/login",
    data,
  });
};

// 需要携带 token 获取数据时,携带登陆成功后存储在本地的token值
// 查询所有使用记录
export const listRecord = () => {
  return request({
    method: "GET",
    url: "/admin/record/listRecord",
    headers: {
      "X-Token": localStorage.getItem("X-Token"),
    },
  });
};

// 携带params参数,也是手动输入的值
export const others = (params) => {
  return request({
    method: "GET",
    url: "/admin/others",
    params,
  });
};

六、在组件页面内调接口拿数据

接口使用例子1

1. 登录接口的使用(同注册),在页面导入接口

// 调用登录接口
import { login } from '@/api/user'

2. 通过async await 来拿到用户输入的值,根据返回结果进行判断返回相应提示

async onSubmit (values) {
  // 手动输入提交的数据:登录、注册、修改密码等提交的值
  let { mobile: vcPhone, password: vcLoginpassword } = values
  const { data } = await login({ vcPhone, vcLoginpassword, })
  console.log(data);
  console.log("submit", values);
 
  if (data.code == "200") {
    this.$toast.success("登录成功");
    this.$router.push({ name: "shouye" });
  } else if (data.message == "没有注册,请先注册") {
    this.$toast.fail(data.message);
  } else if (data.message == "密码错误") {
    this.$toast(data.message);
  } else {
    this.$toast.fail('操作异常,请重试')
  }
  console.log("submit", values);
},
注意:mobile、password是用户在data里定义的值,这里需要将拿到的值赋给自己定义的。
      或者把data里的值改成和后端字段相同,此时可简写。

例如:
let { vcPhone, vcLoginpassword } = values
const { data } = await login({ vcPhone, vcLoginpassword, })

接口使用例子2

1. 通过接口获取数据进行渲染,这里把需要的接口解构出来

import { listRecord } from '@/api/user'

2. data定义需要渲染的数据(可与后端字段一致)

data () {
  return {
    recordFrom: {
      vcReadid: "",
      vcReaddate: "",
      vcCurrremainmoney: "",
    },
    list: [], // 存放所有使用记录数据
    loading: false,
    finished: false,
  };
},

3. 在方法里面调用接口,把拿到的数据放到一个自己定义的数组里面list

methods: {
  async getAllusedRecord () {
    try {
      const { data } = await listRecord()
      this.list = data
      this.loading = false; // 加载状态结束
      this.finished = true;
      // console.log(this.list);
    } catch (err) {
      this.$toast('获取使用记录失败')
    }
  },
},

4. 通过v-for渲染获取到的数据

<ul v-for="item in list" :key="item.name" :title="item">
  <li>
   编号:{{ item.vcReadid }}
   时间:{{ item.vcReaddate }}
   金额:{{ item.vcCurrremainmoney }}
  </li>
</ul>

  • 10
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 芯片设计数字前端需要提供给数字后端的设计文件包括RTL级的设计文件和门级网表文件。RTL级的设计文件主要包括Verilog或VHDL等硬件描述语言描述的电路逻辑功能和结构信息,而门级网表文件则是根据RTL级设计文件经过综合、优化、布局和布线等工艺步骤生成的门级电路网表,其中包括电路中的逻辑门、寄存器、时钟等基本元件。这些设计文件可以被数字后端工程师用来进行后续的物理设计和验证等工作。 ### 回答2: 芯片设计数字前端需要提供给数字后端的设计文件主要包括以下内容: 1.逻辑设计文件:包括逻辑门电路图和硬件描述语言(HDL)代码。逻辑门电路图描述了芯片内部逻辑电路的组成和连接关系;HDL代码是一种用于描述数字电路行为和功能的编程语言,以方便后端工程师进行实现和验证。 2.时序约束文件:指定芯片内各个时钟域的时序要求和时序约束。通过定义时钟频率、信号传输延迟、时序关系等信息,确保芯片能够按照预期的时序性能正确运行。 3.物理约束文件:定义芯片布局和布线的规则和限制。物理约束文件包括但不限于芯片尺寸、引脚位置、电源线规划、信号线路规划等信息,确保芯片在物理层面满足设计要求。 4.功耗分析文件提供芯片的功耗特性和分析结果。数字前端工程师通常需要提供芯片的功耗模型、功耗估计、功耗优化建议等,以帮助后端工程师做出合理的功耗优化设计决策。 5.模拟仿真文件:用于验证芯片设计在仿真环境下的功能和性能。包括仿真模拟器配置文件、仿真脚本、测试用例等。 6.设计文档:提供详细的设计说明和文档,包括设计需求、功能规格、接口协议等,以便后端工程师准确理解设计意图和需求。 这些设计文件为数字后端工程师提供了实现和验证芯片设计的基础,使得芯片能够按照设计要求进行制造和测试。 ### 回答3: 芯片设计的数字前端和数字后端之间需要进行设计文件的传递以保证设计的连贯性和准确性。常见的设计文件包括以下几种: 1. RTL(Register Transfer Level)代码:RTL代码是芯片设计的第一步,它描述了芯片的功能和数据流。数字前端需要将RTL代码提供给数字后端,以便进行后续的综合和布局布线。 2. 约束文件:约束文件包含了芯片设计的时序和电气规范等信息,用于指导数字后端的综合和布局布线工作。数字前端需要提供约束文件,以确保数字后端按照要求进行设计。 3. 时钟树设计:芯片设计中时钟是至关重要的,需要通过专门的时钟树设计来确保时钟信号的传输和稳定性。数字前端需要提供时钟树设计的相关文件,以指导数字后端对时钟进行布局布线。 4. 功耗文件:芯片设计过程中需要考虑功耗的问题。数字前端需要提供功耗文件,其中包括各个模块的功耗估计和限制等信息,以帮助数字后端进行功耗控制和优化。 5. 物理约束:芯片设计的物理约束包括芯片面积、管脚位置等方面的要求。数字前端需要提供物理约束文件,以确保数字后端按照要求进行布局布线和物理设计。 综上所述,芯片设计的数字前端需要提供RTL代码、约束文件、时钟树设计文件、功耗文件和物理约束文件等设计文件给数字后端,以保证芯片设计的顺利进行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋绥冬禧.

一键三联就是最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值