「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据

news2025/1/25 9:21:16

本文主要介绍两种在Vue中访问外部API获取数据的方式,通过让Vue通过项目外部的接口来获取数据,而不是直接由项目本身进行数据库交互,可以实现前端代码和后端代码的分离,让两个部分的代码编写更独立高效。

文章目录

  • 本系列前文传送门
  • 一、场景说明
  • 二、使用Axios获取接口数据
    • 安装Axios
    • 导入Axios
    • Axios获取数据
    • 样式调整
  • 三、使用Fetch API获取接口数据

本系列前文传送门

  • 「网页开发|前端开发|Vue」01 快速入门:快速写一个Vue的HelloWorld项目
  • 「网页开发|前端开发|Vue」02 从单页面到多页面网站:使用路由实现网站多个页面的展示和跳转
  • 「网页开发|前端开发|页面布局」03 学会够用的CSS,实现任意你想要的页面布局
  • 「网页开发|前端开发|Vue」04 快速掌握开发网站需要的Vue基础知识
  • 「网页开发|前端开发|Vue」05 Vue实战:从零到一实现一个网站导航栏
  • 「网页开发|前端开发|Vue」06 公共组件与嵌套路由:让每一个页面都平等地拥有导航栏

一、场景说明

我们的网站一般需要涉及到数据的展示,除了简单的个人信息网站,常见的比如博客网站、电商网站、视频网站、资讯网站等等,都是会涉及较多的数据,这些数据因为数量较多,会存储在数据库中以便于管理。而如果跟数据库进行交互的代码放在前端项目中,容易导致前端项目的代码过于复杂臃肿,在版本迭代中容易导致生产问题。

所以现在比较推崇的前后端分离的架构模式,就将数据处理部分单独放在另外的项目中,而前端项目专门负责在取到数据之后进行页面的渲染和数据的展示。

前端只通过跟后端约定好的数据接口来获取数据,于是我们就需要了解在前端的javascript代码中如何通过外部数据接口来获取数据的方式。本文将介绍两种在vue中访问外部接口的方式:

  • 通过axios发送请求
  • 通过fetch API发送请求

二、使用Axios获取接口数据

Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。类似其他编程语言中的网络请求库。

安装Axios

为了使用这个库,我们需要先进行安装,运行如下命令即可:
npm i axios
如果是使用yarn进行包管理,可以运行:
yarn add axios

导入Axios

进到我们项目的入口src/main.js中,增加如下导入语句:

import axios from 'axios';
Vue.prototype.$http = axios;

然后我们就可以在我们项目的页面中获取数据并展示数据了。我们以首页为例,
我们将先在首页直接硬编码写两个内容卡片,后续使用访问数据接口的方式,改成将接口返回的数据渲染并展示成各个卡片,从而掌握数据接口的访问和展示流程和方式。

首先我们从element-ui中找到卡片组件的代码,然后在HelloWorld.vue中的<template>中增加如下代码:

        <div>
            <el-card class="box-card">
                <div slot="header" class="clearfix">
                    <span>卡片名称</span>
                </div>
                <div class="text item">
                    卡片内容
                </div>
            </el-card>
            <el-card class="box-card">
                <div slot="header" class="clearfix">
                    <span>卡片名称</span>
                </div>
                <div class="text item">
                    卡片内容
                </div>
            </el-card>
        </div>

并且增加如下样式<style>代码:

<style>
  .text {
    font-size: 14px;
  }

  .item {
    margin-bottom: 18px;
  }

  .clearfix:before,
  .clearfix:after {
    display: table;
    content: "";
  }
  .clearfix:after {
    clear: both
  }

  .box-card {
    width: 480px;
  }
</style>

回到浏览器,可以看到页面现在渲染内容如下
在这里插入图片描述
我们看到两张卡片是竖向排列的,我们希望是横向排列,所以根据我们在页面布局中的介绍,我们可以修改元素的display值,如下:
在这里插入图片描述
可以看到页面中的卡片已经顺利变成横向排列了:
在这里插入图片描述

Axios获取数据

现在我们可以使用Axios获取外部数据来生成卡片了,我们可以找免费的外部API来实现,比如httpbin,或者是其他一些比如返回图书或电影的公共API等等。

因为Axiosjavascript包,数据获取也是javascript才能胜任的工作,所以数据获取的代码自然是写在<script>代码块中。在vue中我们定义方法是在export中用methods: {}标记,然后在{}中定义各个方法,如下:

<script>
export default {
    data() {
        return {
            posts: [],
        };
    },

    methods: {
        async getData() {
            try {
                const response = await this.$http.get(
                    "http://jsonplaceholder.typicode.com/posts"
                );
                // JSON格式的返回值会自行解析
                this.posts = response.data;
            } catch (error) {
                console.log(error);
            }
        },
    },
}
</script>

我们增加的这段代码只是对方法进行定义,还没有对方法进行调用。在什么时候调用方法取决于我们的需求,比如进入首页默认展示部分信息、或者网站提供搜索功能仅在用户进行搜索时进行数据获取等等。

如果我们希望在网站加载的时候就获取数据,那么我们可以用到之前介绍 Vue核心知识时提到的「Hook函数」,对应页面加载完毕的hook函数是created(),所以我们在<script>中进行如下代码改动:
在这里插入图片描述

现在我们页面加载后就会获取数据,但是我们还没有增加将这些数据渲染成页面内容的代码,所以我们现在要来完成这个步骤。如果要提前验证数据请求是否成功,可以自行在getData()中增加console.log()方法将数据请求结果打印出来进行验证,数据返回的数据如下:

[
    {
        "userId": 1,
        "id": 1,
        "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
        "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
    }
]

根据我们在 Vue核心知识中介绍的,如果我们现在希望使用vue的便捷语法,在<div>中生成多个<el-card>,那么就需要在<el-card>标签中使用v-for指令,如下:
在这里插入图片描述
然后我们回到浏览器,可以看到页面已经将请求到的posts数组中的各个元素都渲染成了单独的卡片,如下:
在这里插入图片描述

样式调整

当然我们可以调整一下卡片的样式,比如缩小卡片的宽度,增加卡片之间的间距等等,如下:

.box-card {
    width: 300px;
    display: inline-block;
    margin: 1.5rem;
}

就可以得到如下调整后的样式:
在这里插入图片描述

三、使用Fetch API获取接口数据

Fetch API是javascript中自带的一组API,提供了用于获取数据的接口方法。我们刚才使用的axios就是基于Fetch API封装的库。

我们获取数据使用的是Fetch API中的fetch()方法,方法与刚才使用axios基本一致,代码如下:

    methods: {
        async getData() {
            try {
                // axios 获取数据方法
                // const response = await this.$http.get(
                //     "http://jsonplaceholder.typicode.com/posts"
                // );
                // JSON格式的返回值会自行解析
                // this.posts = response.data;

                // Fetch API 获取数据方法
                const response = await fetch("http://jsonplaceholder.typicode.com/posts");
                this.posts = await response.json();

            } catch (error) {
                console.log(error);
            }
        },
    },

然后回到我们的浏览器页面,我们可以看到浏览器页面仍然成功地渲染出了数据,说明我们的数据请求是成功的,如下:
在这里插入图片描述

axios是封装的库,所以使用会更简单,而Fetch API是更基础的接口,所以使用更灵活,在实际开发中根据实际需求来选择即可。

明白了如何在Vue中访问外部接口获取数据,前后端分离就完成了一半,剩下的就是我们为项目开发后端接口提供数据,所以接下来我们将介绍后端开发的部分 (●ˇ∀ˇ●)

写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇

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

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

相关文章

SpringMVC的常用注解,参数传递以及页面跳转的使用

目录 slf4j 常用注解 RequestMapping RequestParam RequestBody PathVariable 参数传递 首先在pom.xml配置文件中导入SLF4J的依赖 基础类型String 复杂类型 RequestParam PathVariable RequestBody 增删改查 返回值 void返回值 String返回值 modelString …

“高效记录收支明细,按时间轻松查找借款信息“

我们有时候要去查找借款信息&#xff0c;只记得住借款记录的日期&#xff0c;想通过日期来进行筛选出借款信息&#xff0c;要如何进行操作&#xff1f;今天就让小编来教教大家要如何操作。 第一步&#xff0c;我们要打开【晨曦记账本】&#xff0c;并登录账本。 第二步&#x…

弃用http改用https的缘故,与密钥的使用,证书意义

为何弃用http协议 在十几年前&#xff0c;我们的传输协议是http协议&#xff0c;为何到了如今改成了https协议呢&#xff1f;为了安全的考虑。 在http协议中&#xff0c;我们的内容是透明的&#xff0c;不被保护的&#xff0c;在黑客等恶意分子的面前&#xff0c;信息极其任意…

百度输入法全面升级,打造首个基于大模型的输入法原生应用

基于文心一言&#xff0c;百度输入法宣布全面升级&#xff0c;打造行业首个“基于大模型的输入法原生应用”&#xff0c;从“输入工具”全面转型为“AI创作工具”。 近日&#xff0c;百度文心一言正式向公众开放。基于文心一言&#xff0c;百度输入法宣布全面升级&#xff0c;打…

Spring Data Rest远程命令执行漏洞复现(CVE-2017-8046)

一、漏洞说明 Spring Data Rest服务器在处理PATCH请求时存在一个远程代码执行漏洞。攻击者通过构造好的JSON数据来执行任意Java代码 二、影响版本 Spring Data REST versions < 2.5.12, 2.6.7, 3.0 RC3 Spring Boot version < 2.0.0M4 Spring Data release trains < K…

Python爬虫 教程:IP池的使用

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一、简介 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施&#xff0c;例如很多网站会检测某一段时间某个IP的访问次数&#xff0c;如果访问频率…

tcp满开始和拥塞避免

tcp的拥塞控制有四种算法&#xff0c;后面的快重传和快恢复是后面新增的&#xff0c; 刚开始会初始化慢开始门限值&#xff0c;并将拥塞窗口值为1往网络中发送&#xff0c;若收到确认包则将拥塞窗口翻倍&#xff0c;执行慢开始算法&#xff0c;当拥塞窗口值达到慢开始门限后&am…

关于测试的思考-自动化测试以及流量回放

二、自动化平台建设 线上问题 流量回放 一些流量回放比较好的实践

【F2 ...】

F2 -ThrombinGlaKRKRlightSP

人工智能轨道交通行业周刊-第59期(2023.9.4-9.10)

本期关键词&#xff1a;无锡智慧地铁、无人车站、钢轨打磨、混元大模型、开源大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨道世界…

【JavaEE】线程安全

文章目录 1. 前言2. 线程安全的概念3. 造成线程不安全的原因4. 如何解决出现的线程不安全问题4.1 如何使用 synchronized 加锁&#xff1f;4.2 解决上面自增问题导致的线程安全问题 5. synchronized 的特性5.1 互斥性5.2 可重入性 6. 死锁6.1 什么情况下会造成死锁6.1.1 两个线…

[学习笔记]Node2Vec图神经网络论文精读

参考资料&#xff1a;https://www.bilibili.com/video/BV1BS4y1E7tf/?p12&spm_id_frompageDriver Node2vec简述 DeepWalk的缺点 用完全随机游走&#xff0c;训练节点嵌入向量&#xff0c;仅能反应相邻节点的社群相似信息&#xff0c;无法反映节点的功能角色相似信息。 …

从 LinkedHashMap 源码到手撕 LRU 缓存

大家好&#xff0c;我是 方圆。最近在刷 LeetCode 上LRU缓存的题目&#xff0c;发现答案中有 LinkedHashMap 和自己定义双向链表的两种解法&#xff0c;但是我对 LinkedHashMap 相关源码并不清楚&#xff0c;所以准备学习和记录一下。如果大家想要找刷题路线的话&#xff0c;可…

Windows如何体验使用Linux

一、背景 因早上刷抖音时&#xff0c;刷到一博主介绍WSL这个东东&#xff0c;因已很少在本地电脑操作Linux环境&#xff0c;咱们来看下这个和传统的vmware workstation 、virtualbox虚拟机有啥不同&#xff0c;WSL如何安装和使用&#xff1b;另提前声明&#xff0c;WSL不推荐用…

超实用!五种常用的多离散化小技巧

一、引言 「离散化」在数据分析中扮演着重要的角色。通过将连续型变量转化为离散型变量&#xff0c;我们可以更好地理解和分析数据&#xff0c;从而揭示出潜在的模式和关系。本文的目的是介绍五种常用的多离散化小技巧&#xff0c;它们可以帮助数据分析人员有效地处理连续变量。…

企业架构LNMP学习笔记34

LVS-DR模式&#xff1a; 老师分析&#xff1a; 1、首先用户用CIP请求VIP 2、根据上图可以看到&#xff0c;不管是Director Server还是Real Server上都需要配置VIP&#xff0c;那么当用户请求到达我们的集群网络的前端路由器的时候&#xff0c;请求数据包的源地址为CIP目标地址…

02. Kubeadm部署Kubernetes集群

目录 1、前言 2、Kubernetes部署方式 3、kubeadmin部署 3.1、关闭防火墙 3.2、配置阿里云Kubernetes源 3.3、安装kubeadm&#xff0c;kubelet&#xff0c;kubectl 3.4、初始化master节点 3.5、master节点配置kubectl命令行工具 3.6、master节点下载flannel网络配置文件…

Java 抽象类能不能实例化

短回答就是&#xff1a;不能 这里有 2 个概念&#xff0c;什么是抽象类和什么是实例化。 实例化 实例化简单来说就是为 Java 中使用的对象分配存储空间。 抽象类 从代码上来说&#xff0c;抽象类就是一个用 abstract 关键字来修饰的类。 这个类除了不能被实例化以外&#x…

第16章_瑞萨MCU零基础入门系列教程之CAN 协议

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

喜报 | 实力亮相2023服贸会,擎创科技斩获领军人物奖创新案例奖

近日&#xff0c;由中华人民共和国商务部、北京市人民政府共同主办的中国&#xff08;北京&#xff09;国际服务贸易交易会&#xff08;简称服贸会)已圆满落幕。 本次会议中&#xff0c;发布了2023年度“数智影响力”征集活动获奖名单&#xff0c;擎创科技创始人兼CEO杨辰获企…