vue封装axios与api接口管理的完整步骤

下面我将详细讲解vue封装axios与api接口管理的完整步骤。

1. 安装axios

在开始封装axios之前,我们需要先安装axios。可以通过npm进行安装:

npm install axios --save

2. 封装axios

封装axios的目的是为了在项目中统一处理请求和响应,方便管理和维护。以下是封装axios的完整步骤:

2.1 创建axios实例

在src目录下新建一个api目录,在api目录下新建一个request.js文件,并引入axios:

import axios from 'axios';

接着,创建axios实例:

const request = axios.create({
  baseURL: 'http://localhost:3000', // 接口的基础路径
  timeout: 5000 // 请求超时时间
});

2.2 请求拦截器

在request.js文件中,我们可以为axios实例添加请求拦截器,用于在请求发出前统一处理请求参数和请求头:

request.interceptors.request.use(
  config => {
    // TODO: 统一处理请求参数和请求头
    return config;
  },
  error => {
    // TODO: 处理请求错误
    return Promise.reject(error);
  }
);

2.3 响应拦截器

同样的,我们也可以添加响应拦截器,用于在响应返回后统一处理响应结果和响应错误:

request.interceptors.response.use(
  response => {
    // TODO: 统一处理响应结果
    return response.data;
  },
  error => {
    // TODO: 处理响应错误
    return Promise.reject(error);
  }
);

2.4 封装请求方法

最后一步是封装请求方法,我们可以按照请求类型(GET、POST等)封装不同的方法,如下所示:

export const get = url => {
  return request.get(url);
};

export const post = (url, data) => {
  return request.post(url, data);
};

export const put = (url, data) => {
  return request.put(url, data);
};

export const del = url => {
  return request.delete(url);
};

3. api接口管理

有了封装好的axios实例,我们的下一步是管理api接口。在src/api目录下,新建一个api.js文件,用于管理所有的api接口。

例如,我们有一个名为“users”的资源,其接口如下:

接口 方法 描述
/api/users GET 获取所有用户
/api/users/:id GET 获取用户详细信息
/api/users POST 新建用户
/api/users/:id PUT 更新用户信息
/api/users/:id DELETE 删除用户

我们可以将以上接口封装成对象形式,如下所示:

import { get, post, put, del } from './request';

export const users = {
  get() {
    return get('/api/users');
  },
  getById(id) {
    return get(`/api/users/${id}`);
  },
  create(data) {
    return post('/api/users', data);
  },
  update(id, data) {
    return put(`/api/users/${id}`, data);
  },
  delete(id) {
    return del(`/api/users/${id}`);
  }
};

通过以上代码,我们就可以在项目中方便地调用API接口进行数据的增删改查了。

示例说明

以下是两个简单的示例,演示了封装axios和API接口管理的应用场景。

示例1:请求Github API并展示数据

在这个示例中,我们使用Github API获取用户数据,并展示在页面上。

首先,在api目录下新建一个github.js文件,用于管理Github API接口:

import { get } from './request';

export const github = {
  getUser(username) {
    return get(`https://api.github.com/users/${username}`);
  }
};

接着,在vue组件中使用github.getUser方法获取数据,代码如下:

<template>
  <div>
    <input v-model="username">
    <button @click="getGithubUser">查询</button>
    <div v-if="user">
      <h2>{{ user.login }}</h2>
      <img :src="user.avatar_url" width="100" height="100">
      <p>{{ user.bio }}</p>
    </div>
  </div>
</template>

<script>
import { github } from '@/api/github';

export default {
  data() {
    return {
      username: '',
      user: null
    };
  },
  methods: {
    async getGithubUser() {
      const user = await github.getUser(this.username);
      this.user = user;
    }
  }
};
</script>

示例2:使用Node.js搭建RESTful API并调用

在这个示例中,我们使用Node.js和Express框架搭建一个RESTful API,并在vue组件中调用该API。

先来看一下express的路由代码:

const express = require('express');
const app = express();

const users = [
  { id: 1, name: '张三', age: 18 },
  { id: 2, name: '李四', age: 19 },
  { id: 3, name: '王五', age: 20 }
];

app.get('/api/users', (req, res) => {
  res.json(users);
});

app.get('/api/users/:id', (req, res) => {
  const user = users.find(user => user.id === parseInt(req.params.id));
  if (user) {
    res.json(user);
  } else {
    res.status(404).json({ message: '用户不存在' });
  }
});

app.post('/api/users', (req, res) => {
  const user = { id: users.length + 1, ...req.body };
  users.push(user);
  res.status(201).json(user);
});

app.put('/api/users/:id', (req, res) => {
  const user = users.find(user => user.id === parseInt(req.params.id));
  if (user) {
    user.name = req.body.name || user.name;
    user.age = req.body.age || user.age;
    res.json(user);
  } else {
    res.status(404).json({ message: '用户不存在' });
  }
});

app.delete('/api/users/:id', (req, res) => {
  const index = users.findIndex(user => user.id === parseInt(req.params.id));
  if (index !== -1) {
    users.splice(index, 1);
    res.sendStatus(204);
  } else {
    res.status(404).json({ message: '用户不存在' });
  }
});

const port = process.env.port || 3000;
app.listen(port, () => {
  console.log(`Server is running on port ${port}.`);
});

接着,在vue组件中使用该API,代码如下:

<template>
  <div>
    <button @click="getUsers">获取所有用户</button>
    <ul v-if="users.length">
      <li v-for="user in users" :key="user.id">{{ user.name }} ({{ user.age }}岁)</li>
    </ul>
  </div>
</template>

<script>
import { get } from '@/api/request';

export default {
  data() {
    return {
      users: []
    };
  },
  methods: {
    async getUsers() {
      const users = await get('/api/users');
      this.users = users;
    }
  }
};
</script>

这里我们只用了request.js中的get方法进行请求,而API接口则可以通过URL直接进行调用。

阅读剩余 82%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue封装axios与api接口管理的完整步骤 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Java堆内存又溢出了!教你一招必杀技(推荐)

    Java堆内存溢出攻略 Java堆内存溢出是Java应用程序中常见的问题之一。本攻略将详细讲解如何解决Java堆内存溢出问题,并提供两个示例说明。 1. 了解Java堆内存溢出 Java堆内存是用于存储对象实例的区域,当应用程序创建的对象数量超过堆内存的限制时,就会发生堆内存溢出。这通常是由于内存泄漏或者对象生命周期管理不当引起的。 2. 分析堆内存溢出错误…

    other 2023年8月2日
    00
  • python实现将docx文件转化为pdf文件

    以下是关于“Python实现将docx文件转化为pdf文件”的完整攻略,包含两个示例。 Python实现将docx文件转化为pdf文件 在Python中,我们使用Python-docx和PyPDF2库将docx文件转化为pdf文件。以下是将docx文件转化为pdf文件的详细攻略。 1. 安装Python-docx和PyPDF2库 在Python中,我们需要安…

    other 2023年5月9日
    00
  • jQuery 禁止表单用户名、密码自动填充功能

    以下是详细讲解“jQuery 禁止表单用户名、密码自动填充功能”的完整攻略。 禁止表单自动填充的原因 表单自动填充功能可以帮助用户快捷地填写表单,但在一些场景下,比如登录表单、支付表单等安全性要求较高的表单中,自动填充功能会增加用户的信息泄露风险,因此有必要禁用这个功能。 禁用用户名、密码自动填充的方法 方法一:在HTML中添加autocomplete属性 …

    other 2023年6月27日
    00
  • miui12.5增强版内存扩展怎么开启?miui12.5增强版开启内存扩展技巧

    MIUI 12.5增强版内存扩展开启攻略 MIUI 12.5增强版内存扩展是一项功能强大的功能,可以帮助您优化手机的内存使用,提升系统的性能和响应速度。下面是详细的攻略,教您如何开启MIUI 12.5增强版内存扩展。 步骤一:进入设置 首先,您需要进入手机的设置界面。您可以通过下拉通知栏,点击右上角的齿轮图标,或者在应用列表中找到“设置”应用来进入设置界面。…

    other 2023年8月2日
    00
  • python如何实现单向链表及单向链表的反转

    下面我将详细讲解如何使用Python实现单向链表及单向链表的反转。 单向链表 单向链表是一种常见的线性数据结构,它由一个个节点组成,每个节点包含一个数据元素和一个指向后继节点的指针。单向链表的头节点通常不包含任何数据信息,只是一个辅助节点,指向第一个真正包含数据信息的节点。 实现方法 我们可以使用Python中的类来实现单向链表。类中定义一个Node类表示每…

    other 2023年6月27日
    00
  • FileZilla Server ftp 服务器下通过alias别名设置虚拟目录(多个分区)

    下面我将分享一下“FileZilla Server ftp 服务器下通过alias别名设置虚拟目录(多个分区)”的完整攻略。 什么是alias别名 在FileZilla中,alias别名被用来创建虚拟目录的一个关键概念,也就是通过设置一个本地路径的别名,来将网络路径映射到本地磁盘上的路径。这种方式可以让FileZilla用户将任意数量的FTP资源映射到他们的…

    other 2023年6月27日
    00
  • linux怎么关闭iptableslinux如何关闭防火墙

    当然,我很乐意为您提供关于“Linux如何关闭iptables防火墙”的完整攻略。以下是详细的步骤说明: 步骤说明 iptables是Linux系统中一个防火墙工具,用于控制网络流量。以下是关闭iptables防火墙的详细步骤: 打开终端或命令行界面。 输入以下命令以停止iptables: sudo systemctl stop iptables 输入以下命…

    other 2023年5月9日
    00
  • android 之Spinner下拉菜单实现级联

    Android之Spinner下拉菜单实现级联攻略 在Android开发中,Spinner是一种常用的下拉菜单控件。实现级联的Spinner可以根据前一个Spinner的选择,动态改变后一个Spinner的选项。下面是实现级联Spinner的完整攻略。 步骤一:准备数据源 首先,我们需要准备两个Spinner的数据源。假设我们要实现一个级联选择省份和城市的功…

    other 2023年9月7日
    00
合作推广
合作推广
分享本页
返回顶部