10-Vue技术栈之脚手架配置代理(解决跨域问题)+ GitHub用户搜索案例

这篇具有很好参考价值的文章主要介绍了10-Vue技术栈之脚手架配置代理(解决跨域问题)+ GitHub用户搜索案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、基本使用

1.1 方法一

​ 在vue.config.js中添加如下配置:

devServer:{
  proxy:"http://localhost:5000"
}

说明:

  1. 优点:配置简单,请求资源时直接发给前端(8080)即可。
  2. 缺点:不能配置多个代理,不能灵活的控制请求是否走代理。
  3. 工作方式:若按照上述配置代理,当请求了前端不存在的资源时,那么该请求会转发给服务器 (优先匹配前端资源)

1.2 方法二

​ 编写vue.config.js配置具体代理规则:

module.exports = {
	devServer: {
      proxy: {
      '/api1': {// 匹配所有以 '/api1'开头的请求路径
        target: 'http://localhost:5000',// 代理目标的基础路径
        changeOrigin: true,
        pathRewrite: {'^/api1': ''}
      },
      '/api2': {// 匹配所有以 '/api2'开头的请求路径
        target: 'http://localhost:5001',// 代理目标的基础路径
        changeOrigin: true,
        pathRewrite: {'^/api2': ''}
      }
    }
  }
}
/*
   changeOrigin设置为true时,服务器收到的请求头中的host为:localhost:5000
   changeOrigin设置为false时,服务器收到的请求头中的host为:localhost:8080
   changeOrigin默认值为true
*/

说明:

  1. 优点:可以配置多个代理,且可以灵活的控制请求是否走代理。
  2. 缺点:配置略微繁琐,请求资源时必须加前缀。

2、GitHub用户搜索案例

  • 实现效果:

10-Vue技术栈之脚手架配置代理(解决跨域问题)+ GitHub用户搜索案例

源代码已上传至个人主页。

结构目录:
10-Vue技术栈之脚手架配置代理(解决跨域问题)+ GitHub用户搜索案例

代码示例:
main文件

import Vue from 'vue'
import App from './App.vue'
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap/dist/js/bootstrap.js'       
Vue.config.productionTip = false
new Vue({
	el: '#app',
	render: h => h(App),
	beforeCreate() {
		Vue.prototype.$bus = this
	}
	// 安装全局事件总线
})

App组件

<template>
  <div class="container">
    <Search/>
    <List/>
  </div>
</template>

<script>
import Search from './components/Search.vue'
import List from './components/List.vue'
export default {
	name:'App',
	components:{Search,List}
};
</script>

Search组件

<template>
  <nav class="navbar navbar-light bg-light p-4">
    <div class="container-fluid">
      <a class="navbar-brand">Search Github Users</a>
      <form class="d-flex">
        <input
          class="form-control me-2"
          type="search"
          placeholder="Search"
          aria-label="Search"
          v-model="keyWord"
        />
        <button class="btn btn-outline-success" @click.prevent="searchUsers">
          Search
        </button>
      </form>
    </div>
  </nav>
</template>

<script>
import axios from "axios";
export default {
  name: "Search",
  data() {
    return {
      keyWord: "",
    };
  },
  methods: {
    searchUsers() {
      // 请求前的数据
      this.$bus.$emit("updateListData", {
        isFirst: false,
        isLoading: true,
        errmsg: "",
        users: [],
      });
      axios({
        method: "GET",
        url: `https://api.github.com/search/users?q=${this.keyWord}`,
      }).then(
        (response) => {
          console.log(response.data.items);
          // 请求成功后的数据
          this.$bus.$emit("updateListData", {
            isLoading: false,
            errmsg: "",
            users: response.data.items,
          });
        },
        (error) => {
          // 请求错误后的数据
          this.$bus.$emit("updateListData", {
            isLoading: false,
            errmsg: error.message,
            users: [],
          });
        }
      );
    },
  },
};
</script>

<style>
</style>

List组件文章来源地址https://www.toymoban.com/news/detail-468610.html

<template>
  <div class="row row-cols-1 row-cols-md-1 g-4 mt-3">
    <div class="col">
      <div
        v-show="info.users.length"
        class="card"
        v-for="user in info.users"
        :key="user.login"
      >
        <a :href="user.html_url" target="_blank">
          <img :src="user.avatar_url" style="width: 100px" />
        </a>
        <p class="card-text">{{ user.login }}</p>
      </div>
    </div>
    <!-- 欢迎词 -->
    <div v-show="info.isFirst">
      <div class="alert alert-success" role="alert">
        <h4 class="alert-heading">welcome to mo world</h4>
        <p>Click Search at the top</p>
        <hr />
        <p class="mb-0">You'll get the list of users you want</p>
      </div>
    </div>
    <!-- 数据加载中 -->
    <div v-show="info.isLoading" class="text-center">
      <div class="spinner-border text-primary" role="status">
        <span class="visually-hidden">Loading...</span>
      </div>
      <div class="spinner-border text-secondary" role="status">
        <span class="visually-hidden">Loading...</span>
      </div>
      <div class="spinner-border text-success" role="status">
        <span class="visually-hidden">Loading...</span>
      </div>
      <div class="spinner-border text-danger" role="status">
        <span class="visually-hidden">Loading...</span>
      </div>
      <div class="spinner-border text-warning" role="status">
        <span class="visually-hidden">Loading...</span>
      </div>
      <div class="spinner-border text-info" role="status">
        <span class="visually-hidden">Loading...</span>
      </div>
      <div class="spinner-border text-light" role="status">
        <span class="visually-hidden">Loading...</span>
      </div>
      <div class="spinner-border text-dark" role="status">
        <span class="visually-hidden">Loading...</span>
      </div>
    </div>
    <!-- 错误 -->
    <div v-show="info.errmsg">{{ info.errmsg }}</div>
  </div>
</template>

<script>
export default {
  name: "List",
  data() {
    return {
      info: {
        isFirst: true,//判断是否为第一次打开页面
        isLoading: false,//判断是否点击了按钮,数据正在在加载中
        errmsg: "",//返回一个错误信息
        users: [],//渲染列表
      },
    };
  },
  mounted() {
    this.$bus.$on("updateListData", (dataObj) => {
      this.info = { ...this.info, ...dataObj };
    });
  },
};
</script>


<style>
.album {
  min-height: 50rem; /* Can be removed; just added for demo purposes */
  padding-top: 3rem;
  padding-bottom: 3rem;
  background-color: #f7f7f7;
}

.card {
  float: left;
  width: 33.333%;
  padding: 0.75rem;
  margin-bottom: 2rem;
  border: 1px solid #efefef;
  text-align: center;
}

.card > img {
  margin-bottom: 0.75rem;
  border-radius: 100px;
}

.card-text {
  font-size: 85%;
}
</style>

到了这里,关于10-Vue技术栈之脚手架配置代理(解决跨域问题)+ GitHub用户搜索案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue2向Vue3过度核心技术工程化开发和脚手架

    1.1 开发Vue的两种方式 核心包传统开发模式:基于html / css / js 文件,直接引入核心包,开发 Vue。 工程化开发模式:基于构建工具(例如:webpack)的环境中开发Vue。 工程化开发模式优点: 提高编码效率,比如使用JS新语法、Less/Sass、Typescript等通过webpack都可以编译成浏览器识

    2024年02月11日
    浏览(39)
  • Vue(Vue脚手架)

    Vue官方提供脚手架平台选择最新版本: 可以相加兼容的标准化开发工具(开发平台) 禁止:最新的开发技术版本和比较旧版本的开发平台   Vue CLI 🛠️ Vue.js 开发的标准工具 https://cli.vuejs.org/zh/ c:cmmand l:line i:interface 命令行接口工具   在cmd中查看vue是否存在cli  全局安

    2024年02月01日
    浏览(33)
  • Vue 脚手架

    ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ └── HelloWorld.vue │ │── App.vue: 汇总所有组件 │ │── main.js: 入口文件 ├── .gi

    2024年03月24日
    浏览(34)
  • 使用Vue脚手架

    (193条消息) 第 3 章 使用 Vue 脚手架_qq_40832034的博客-CSDN博客 说明 1.Vue脚手架是Vue官方提供的标准化开发工具(开发平台) 2.最新的版本是4.x 3.文档Vue CLI脚手架(命令行接口) 具体步骤 1.如果下载缓慢请配置npm淘宝镜像 npm config set registry http://registry.npm.taobao.org 2.全局安装 @v

    2024年02月13日
    浏览(46)
  • 如何搭建vue脚手架

    使用 create-vue 脚手架创建项目 create-vue参考地址:GitHub - vuejs/create-vue: 🛠️ The recommended way to start a Vite-powered Vue project 步骤: 执行创建命令 2.选择项目依赖类容 安装:项目开发需要的一些插件 必装: Vue Language Features (Volar)  vue3语法支持 TypeScript Vue Plugin (Volar)  vue3中更好的

    2023年04月14日
    浏览(35)
  • 使用Vue脚手架2

    ref属性 src/components/SchoolName.vue   src/App.vue   props配置项 src/App.vue src/components/StudentName.vue   注意:当props中与当前组件配置同名时, props中的配置优先级高于当前组件  mixin混入 1. 组件和混入对象含有同名选项 时,这些选项将以恰当的方式进行“合并”,在发生冲突时以 组件

    2024年02月12日
    浏览(37)
  • Vue脚手架搭建项目

    一、 安装Node.js (一) 注意事项 1. 注意电脑系统版本以及位数,按照自己电脑的环境下载相应的Node.js安装包 2. 确定运行项目的Node.js版本和npm版本,避免后期因为版本不同而产生的一些差异问题 3. 在官网下载Node安装包时请下载稳定版(或不同版本的稳定版),正确区分稳定版

    2024年02月09日
    浏览(35)
  • vue脚手架文件说明

    node_modules 都是下载的第三方包 public/index.html 浏览器运行的网页 src/main.js webpack打包的入口 src/APP.vue Vue页面入口 package.json 依赖包列表文件

    2024年02月15日
    浏览(36)
  • vue脚手架创建项目

    npm install -g @vue/cli 如果报错可以尝试使用cnpm vue -V vue create 项目名称 输入y 上下选中选项 Manually select features (自由选择),回车 vue 版本的选择 其他按需要选择

    2024年02月05日
    浏览(52)
  • Vue3脚手架笔记

    Vue模板语法有2大类 : 1.插值语法: 功能:用于解析标签体内容。 写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性。 ** 2.指令语法:** 功能:用于解析标签(包括:标签属性、标签体内容、绑定事件…)。 举例:v-bind:href=“xxx” 或 简写为 :href=“xxx”,xxx同

    2024年01月24日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包