1.使用mock模拟服务器产生跨域

安装express

  1. npm i -s express

新建mock文件夹
创建index.js

  1. const express = require("express");
  2. const router = require("./router");
  3. const app = express();
  4. app.use("/", router);
  5. app.listen(3100, function () {
  6. console.log("端口已经启动,监听3000端口");
  7. });

创建路由文件router.js

  1. const express = require("express");
  2. const router = express.Router();
  3. router.get("/api/list", (req, res) => {
  4. res.send([
  5. { name: "iwen", age: 20, clas: 1 },
  6. { name: "xiaomin", age: 25, clas: 3 },
  7. { name: "wsen", age: 30, clas: 2 },
  8. { name: "ddf", age: 21, clas: 1 },
  9. { name: "wsfen", age: 30, clas: 2 },
  10. { name: "dddddf", age: 24, clas: 4 },
  11. ]);
  12. });
  13. module.exports = router;

运行文件

  1. node index.js

2.配置代理解决跨域

在package.json中配置代理

  1. "proxy":"http://tingapi.ting.baidu.com"

image.png
在使用地址需要

  1. function App() {
  2. const httpRequest = () => {
  3. //这里只需要写端口号后面的地址
  4. fetch("/api/list")
  5. .then((res) => res.json())
  6. .then((data) => {
  7. console.log(data);
  8. });
  9. };
  10. return (
  11. <div className="App">
  12. <button onClick={httpRequest}>跨域请求方式一</button>
  13. </div>
  14. );
  15. }
  16. export default App;

3.使用http-proxy-middleware

安装依赖

  1. npm i http-proxy-middleware --s

在src目录下配置setupProxy.js文件

  1. // const proxy = require('http-proxy-middleware')
  2. const { createProxyMiddleware } = require("http-proxy-middleware");
  3. module.exports = function (app) {
  4. // http://localhost:3100/api/list
  5. app.use(
  6. "/api",
  7. createProxyMiddleware("/api", {
  8. //api是需要转发的请求(所有带有/api1前缀的请求都会转发给5000)
  9. target: "http://localhost:8000", //配置转发目标地址(能返回数据的服务器地址)
  10. changeOrigin: true, //控制服务器接收到的请求头中host字段的值
  11. pathRewrite: {'^/api': ''} //去除请求前缀,保证交给后台服务器的是正常请求地址(必须配置)
  12. })
  13. );
  14. };

使用

  1. function App() {
  2. const httpRequest = () => {
  3. //这里的地址为api开头
  4. fetch("/api/list")
  5. .then((res) => res.json())
  6. .then((data) => {
  7. console.log(data);
  8. });
  9. };
  10. return (
  11. <div className="App">
  12. <button onClick={httpRequest}>跨域请求方式二</button>
  13. </div>
  14. );
  15. }
  16. export default App;