GitHub多翻一下有的
点赞 评论

相关推荐

05-18 00:37
快手_前端开发
在使用 React 进行前端开发时,调用后端接口往往会遇到 跨域问题。这是前端开发中一个非常常见但又容易让初学者困惑的问题。本文将从跨域的基本原理讲起,结合 React 项目的实际开发,讲解如何优雅地解决跨域问题。一、什么是跨域?“跨域”是指浏览器出于安全策略(同源策略 Same-Origin Policy)的限制,阻止一个网页去请求另一个“源”的资源。所谓“源”指的是:协议、域名、端口。只要其中一个不同,就算是跨域。例如:- ✅ http://localhost:3000向 http://localhost:3000请求 —— 同源- ❌ http://localhost:3000向 http://api.example.com请求 —— 跨域- ❌ http://localhost:3000向 https://localhost:3000请求 —— 跨域(协议不同)- ❌ http://localhost:3000向 http://localhost:5000请求 —— 跨域(端口不同)二、React 项目中的跨域场景React 开发环境通常使用 create-react-app脚手架,该脚手架会在 localhost:3000启动一个开发服务器。如果你的 API 接口部署在另一个地址,比如:fetch('http://localhost:5000/api/user')浏览器就会报类似下面的错误:Access to fetch at 'http://localhost:5000/api/user' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.这说明前端请求被浏览器拦截了,产生了跨域错误。三、解决方案:使用本地代理(推荐)在 React 项目中,我们推荐使用 代理转发(proxy)的方式解决跨域问题。1. 配置方法方法一:使用 vite(推荐现代项目)在 vite.config.js中添加:export default {  server: {    proxy: {      '/api': {        target: 'http://localhost:5000',        changeOrigin: true,        rewrite: path => path.replace(/^\/api/, '')      }    }  }}请求写法:fetch('/api/user')  // 实际会代理到 http://localhost:5000/user方法二:使用 create-react-app在项目根目录下创建 setupProxy.js文件(适用于 react-scripts):npm install http-proxy-middleware --save// src/setupProxy.jsconst { createProxyMiddleware } = require('http-proxy-middleware');module.exports = function(app) {  app.use(    '/api',    createProxyMiddleware({      target: 'http://localhost:5000',      changeOrigin: true,      pathRewrite: {        '^/api': ''      }    })  );};此时你可以在前端发请求如下:fetch('/api/user')代理服务器会将请求自动转发到后端地址 http://localhost:5000/user,浏览器认为是本地访问,从而不会报跨域错误。四、后端支持 CORS(跨域资源共享)如果你无法使用代理(比如项目已部署上线),需要让后端支持 CORS。以 Node.js/Express 为例:npm install corsconst express = require('express');const cors = require('cors');const app = express();app.use(cors());app.get('/user', (req, res) => {  res.json({ name: '张三' });});后端添加 Access-Control-Allow-Origin等响应头后,浏览器就能正常接收响应。五、其他跨域解决方式(了解)
点赞 评论 收藏
分享
第一次就被中厂拷打 紧张鼠了呜呜公司:地平线时长:53minPart1. 热身环节- 自我介绍- 什么时候开始学习前端- 学习的方式有什么- 平时有用一些AI工具吗Part2. 项目1拷打- 你内容管理平台的框架是怎么搭建的- 你项目的开发工具或者说这个脚手架是怎么生成的(不知道什么意思直接说了用命令行,然后就说你说一下你使用的相关命令是什么)- 有去了解ESlint的配置以及一些构建的配置吗- 项目有部署吗?怎么部署的Part3. 项目2拷打- 组件库的话一些架构还有一些比如Babel插件怎么来的?是用现成的框架吗?(没理解他的意思然后我在乱扯,之后他又问了一遍)- 脚手架是哪来的?是怎么搭建的?开发环境是怎么准备的?- 你这个组件库有没有实际应用到项目里面去- 你组件库打包方式和正常开发者打包成UMD的方式有什么不一样?- 那你组件库的静态文件是怎么处理的?(比如里面用到的图片)Part4. 八股盛宴- 怎么用 CSS 去实现一个垂直居中的效果- 响应式布局的方式有哪些(只知道一个媒体查询,问还有吗?)- 用css实现一个三角形- 怎么设置那个盒子元素的阴影呢?- 渐变色的属性是什么?- 怎么设置背景图片的位置和大小?- background的配置顺序是什么?- 怎么在网页中播放一个音频文件?- 那我们正常这个播放一个音频的时候,打开网页怎么让它自动播放?- 怎么在网页中嵌入这个第三方网页链接的地址?(愚蠢如我说个href,说不是,是要直接嵌入别人的网页)- css的选择器有哪些?- 伪类选择器你了解哪些?- js的数据类型有哪些?- 这八个可以分成哪两类?- js的事件循环机制是什么样的?- 闭包的实现方式有哪些?(完了只知道一个然后被问还有吗?)- 说一下原型和原型链吧- 怎么判断判断这个原型上的属性是属于他自己的还是它链上的?- function可以用new方法吗- 你有一个 object 和 new 一个方式,他们的_proto_分别指向什么?- 判断这个变量类型的方法有哪些?- typeof和instanceof的区别?- instanceof不可以判断基本数据类型吗?- let const var的区别- 模版字符串怎么使用?{}里面可以执行一些计算一些方法吗?- 解构数组的第二个元素怎么解构?- 箭头函数和普通函数的区别- map和forEach的区别- 如何查找数组元素的索引(脑子短路只知道遍历)- 那我怎么判断这个数组里面是否包含我想要的元素呢?- promise 有哪些状态?- 那我可以手动把这个先resolved之后再rejected吗- Promise.all和Promise.race的区别和作用是什么?- promise 和 async/wait 有什么区别- 有用过Proxy吗- 有用过Reflect吗- map和set的区别- 正常开发怎么通过浏览器去定位这个错误- 控制台里可以看到哪些内容- 断点有使用过吗?怎么使用?- 开发者工具里的网络包含哪些内容?- 开发者工具其他的呢?里面有什么Part5. 手撕- 手撕深拷贝(PS:苯蛋人侥幸心理只准备了怎么解决循环引用和处理数组对象,本来其他类型就准备瞎扯一扯,结果给我一个样例让我跑起来看结果,里面对象套数组套对象,然后还有new Date(),直接不会了)——>我回去一定好好看深拷贝完整版Part6.反问    
已注销:鬼鬼,这八股谁顶得住
点赞 评论 收藏
分享
牛客网
牛客企业服务