四、网络请求与路由

news/2024/7/10 0:20:55 标签: vue

一、网络请求

1、Axios请求

Axios是一个基于promise的网络请求库

(1)安装

npm install --save axios

(2)引入

import axios from "axios"

全局引入
import axios from "axios"
import { createApp } from 'vue'
import App from './App.vue'

const app = createApp(App);
app.config.globalProperties.$axios = axios;
app.mount('#app');

// 调用方式 this.$axios

(3)网络请求基本示例

get请求

axios({
	method: "get",
	url:"http://xxx.com"
}).then(res => {
	console.log(res.data);
})

post请求
参数需要处理为字符串
安装依赖 npm install --save querystring
引入:import qs from “querystring”
使用:qs.stringify({})

axios({
	method: "post",
	url:"http://xxx.com/xxx",
	data:{
		id:"xxx"
	}
}).then(res => {
	console.log(res.data);
})

(4)快捷请求

get请求

axiso.get("http://xxx.com/xxx").then( res=>{console.log(res.data);} )

post请求

axiso.post("http://xxx.com/xxx", qs.stringify({ id:"xxx" })).then( res=>{console.log(res.data);} )

二、网络请求封装

1、网络请求封装

创建js文件(在/src/utils)request.js
import axios from "axios"
import querystring from "querystring"

// 创建网络对象
const instance = axios.create({
	// 配置网络请求公共参数
	timeout:3000
})

// 请求拦截,发送之前的注册
instance.interceptors.request.use(
	config = >{ // 请求成功
		if(config.methods === "post"){
			config.data = qs.stringify(config.data)
		{
		// config包括网络请求所有信息
		return config;
	},
	error =>{ //请求失败
		return Promise.reject(error);
	}
)
 
// 响应拦截,获取数据之前
instance.interceptors.response.use(
	response =》{
		return response.status === 200 ? Promise.resolve(response) : Promise.reject(response)
	},
	error =>{ //请i去失败
		const { response } = error;
		console.log(response.status);
	{
{

2、接口调用

创建文件:path.js(或者base.js)j 和 index.js
// path.js
const base ={
	baseUrl: "http://xxx.com",
	path1:"/api/aaa"
}

// index.js
import axios from "../utils/request"
impoer path from "./path"

const api = {
	getPath1(){
		return axios.get(path.baseUrl + path.path1);
	}
}

const default api

// vue文件
import api from "../api/index"

export default{
	......
	mounted(){
		api.getPath1().then( res =?{
			console.log(res.data);
		})
	}
}

三、跨域问题解决

1、问题原有

js采用的时同源策略,浏览器只允许js代码请求和当前服务器的域名、端口、协议相同的数据接口的数据。当协议、域名、端口,任意一个不相同时,就会产生跨域问题。

在这里插入图片描述

2、解决方案proxy

(1)修改配置

// vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
    proxy: {
      "/api": {
        target: "https://ip.cn",
        changeOrigin: true
      }
    }
  }
})

(2)将请求地址前面的域名删除,之后重启

this.$axios({
            methos: "get",
            url: "/api/index?ip=&type=0"
        }).then(
            res => {
                console.log(res.data);
            }
        )

vue_167">三、vue引入路由配置(页面跳转)

1、创建附带路由的项目

Vue CLI v5.0.8
? Please pick a preset: Manually select features
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to 
proceed)
 (*) Babel
 ( ) TypeScript
 (*) Progressive Web App (PWA) Support
>(*) Router	//路由选项
 ( ) Vuex
 ( ) CSS Pre-processors
 ( ) Linter / Formatter
 ( ) Unit Testing
 ( ) E2E Testing

2、使用路由

(1)使用路由

<!-- vue-router\src\App.vue -->
<template>
  <router-link to="/">首页</router-link> |
  <router-link to="/about">关于</router-link>
  <router-view></router-view>
</template>

<style></style>

(2)配置路由

// vue-router\src\router\index.js
import { createRouter, createWebHashHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'

const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView
  },
  {
    path: '/about',
    name: 'about',
    // 异步加载,没有被点击不会加载
    component: () => import("../views/AboutView.vue")
  }
]

const router = createRouter({
  /**
 * createWebHashHistory
 *      home:http://localhost:8080/#/
 *      about:http://localhost:8080/#/about
 * 
 *  原理:a标签锚点连接
 */
  /**
   * createWebHistory
   *      home:http://localhost:8080/
   *      about:http://localhost:8080/about
   * 此种方式,需要后台配合做重定向,否则会出现404问题
   * 
   * 原理:H5 pushState()
   */
  history: createWebHashHistory(),
  routes
})

export default router

(3)主页内容

<!-- vue-router\src\views\HomeView.vue -->
<template>
  <div>
    <h1>主界面</h1>
  </div>
</template>

<script>

export default {
  name: 'HomeView'
}
</script>

(4)关于页面内容

<!-- vue-router\src\views\AboutView.vue -->
<template>
  <div>
    <h1>关于页面</h1>
  </div>
</template>

<script>
export default {
  name: 'AboutView'
}
</script>

四、路由传递参数

1、在路径中指定参数的key

 {
    path: "/news/info/:msg",
    name: "mewsinfo",
    component: () => import("../views/NewsInfoView.vue")
  }

2、在跳转中设置参数

		<li><router-link to="/news/info/百度新闻">百度新闻</router-link></li>
        <li><router-link to="/news/info/网易新闻">网易新闻</router-link></li>
        <li><router-link to="/news/info/头条新闻">头条新闻</router-link></li>

3、接收参数

<template>
    <p>{{ $route.params.msg }}: 新闻详情</p>
</template>

在这里插入图片描述

五、嵌套路由

1、嵌套路由

// vue-router\src\router\index.js
import { createRouter, createWebHashHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'

const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView
  },
  {
    path: '/about',
    name: 'about',
    // 异步加载,没有被点击不会加载
    component: () => import("../views/AboutView.vue")
  },
  {
    path: "/news",
    name: "mews",
    // 重镜像,默认选择baidu
    redirect: "/news/baidu",
    component: () => import("../views/NewsView.vue"),
    children: [
      {
        path: "baidu",
        component: () => import("../views/NewsBaiduView.vue")
      },
      {
        path: "wangyi",
        component: () => import("../views/NewsWangyiView.vue")
      }
    ]
  }
]

const router = createRouter({
  history: createWebHashHistory(),
  routes
})

export default router

在这里插入图片描述


http://www.niftyadmin.cn/n/5113633.html

相关文章

【网络爬虫 | Python】数字货币ok链上bitcoin大额交易实时爬取,存入 mysql 数据库

文章目录 一、网站分析二、js 逆向获取 X-Apikey三、python 调用 js 获取 X-Apikey四、python 爬虫部分五、mysql 数据库、日志、配置文件、目录结构六、结尾 一、网站分析 oklink&#xff1a;https://www.oklink.com/ btc 大额交易&#xff1a;https://www.oklink.com/btc/tx-…

pt30redis数据类型

Redis介绍 特点及优点 1、开源的&#xff0c;使用C编写&#xff0c;基于内存且支持持久化 2、高性能的Key-Value的NoSQL数据库 3、支持数据类型丰富&#xff0c;字符串strings&#xff0c;散列hashes&#xff0c;列表lists&#xff0c;集合sets&#xff0c;有序集合sorted se…

Qt基础之三十八:快捷键

目录 一.按钮的快捷键 二.菜单项的快捷键 1.菜单栏菜单 2.快捷菜单 三.QShortcut

PlantUml 思维导图学习

bash startmindmap plantuml caption figure 1 title PlantUml画思维导图学习 思维导图 ** 兼容markdown写法 ** -,* 代表左右扩展方向 ** 多行表示法 : ; 包围起来,其中:前面要和其他分成的符号(*,-,)没有空格 **:这个多行表示&#xff0c;第一行 第二行 ; ** 里面写代码 **…

如何让chatGPT给出高质量的回答?

如何让chatGPT给出高质量的回答&#xff1f; ChatGPT从入门到进阶教程合集_哔哩哔哩_bilibili 公式 【指令词】【背景】【输入】【输出要求】 1. 指令词 ——精准任务or命令 如&#xff1a;简述、解释、翻译、总结、润色 2. 背景 ——补充信息 如&#xff1a;简述一篇讲解…

docker学习-常用命令

//ubuntu中简单创建新用户的方法 sudo adduser robot //docker和docker-compose的安装 sudo apt install docker docker-compose //加入docker用户组&#xff1a; sudo groupadd docker #添加docker用户组 sudo gpasswd -a ${USER} docker #将用户加入到docker用户组中…

c语言用json解析库(jansson)检测字符串是否是json格式的数据

C语言检测字符串是否是json格式的数据&#xff0c;可以用jansson库检测&#xff0c;也可以用cjson库来校验。但是若数据格式有问题&#xff0c;jansson可以指出哪里有错误&#xff0c;cjson无法指出。 下面就演示C语言如何使用jansson库检测字符串是否是json格式的数据。 1.下载…

Python基础入门例程2-NP2 多行输出

描述 将字符串 Hello World! 存储到变量str1中&#xff0c;再将字符串 Hello Nowcoder! 存储到变量str2中&#xff0c;再使用print语句将其打印出来&#xff08;一行一个变量&#xff09;。 输入描述&#xff1a; 无 输出描述&#xff1a; 第一行输出字符串Hello World!&a…