angular-cli中配置代理

为什么要做代理配置?

前端开发中经常会遇到跨域的问题,特别是在开发环境,本地开发请求后台接口,因为前端服务和后台服务不是同一台电脑所以会出现跨域的现象,也就是遵循我们的同源策略,即协议,域名,端口不一致时就会出现跨域的现象, 此时在我们本地调试程序久需要惊醒代理配置,我用的angular框架做开发,所以本文围绕angular
如下图,我是用express配置了一个接口

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

router.post('/api/home', function(req, res, next) {
    res.send("登陆成功");
});
router.post('/auth', function(req, res, next) {
  res.send("登陆成功");
});
module.exports = router;

然后在不做任何操作的情况下请求这个/auth的这个接口,接口的全称应该是192.168.1.109:8888/auth
结果会报错,如下图

image.png

因为我angular项目的服务为http://192.168.1.109:4201/#/home,虽然是同一台电脑,但是端口不一样也会存在跨域的问题

新建JSON配置文件设置代理配置

在项目的根目录新建JSON文件

   {
    "/":{
        "target":"http://192.168.1.109:8888",
        "secure":false,
        "changeOrigin":true
    }
}
  • target: 请求目标服务地址
  • secure:为false时,允许不是https和安全证书无效的服务
  • changeOrigin:为true ,允许请求跨域
    配置好了,要在pageage.json文件中添加服务启动时同时启动代理文件
image.png

配置好了后,npm start启动项目,请求成功

image.png

如果想代理多个路径,可以换一种方式配置,加了个context参数

{
    "context":["/auth","/api"],
    "target":"http://192.168.1.109:8888",
    "secure":false,
    "changeOrigin":true
}

此配置可以代理接口地址为“/auth”和“/api”开头路径的服务,以上方法是用json文件配置代理的,还可以用ES6模块化的方式配置

用ES6模块化方式配置代理

同样在项目的根目录新建一个proxy.config,js文件,此文件是js文件
和json文件同样配置,此时不在赘述

const target = process.env.api_url || "http://192.168.124.9:8888";
module.exports = {
  // "/": {
  //   target: target,
  //   secure: false,//接受https且证书的后台服务器
  //   changeOrigin: true,
  // },
  context: ['/auth', '/api','/logOut'],//将多个特定路径代理到同一目标
  target: target,//接受https且证书的后台服务器
  changeOrigin: true,//接口跨域时,需要配置,将主机标头的原点更改为目标URL
};

这里插一句,如果要请求不跨域还可以修改接口的请求头,例如我express写的接口,所以我会在请求前做相应的参数设置

//设置允许跨域访问该服务.
app.all('*', function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  //Access-Control-Allow-Headers ,可根据浏览器的F12查看,把对应的粘贴在这里就行
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  res.header('Access-Control-Allow-Methods', '*');
  res.header('Content-Type', 'application/json;charset=utf-8');
  next();
});

如果要需要进行其他参数的配置可以参照webpack官方文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容