跨域
什么是跨域
我们知道一个 URL 是由协议、域名、端口三部分组成的,如:http://loveanv.cn:80,那么当请求 URL 的协议、域名、端口中的任意一个与当前页面的 URL 不同,则被认为是跨域。
产生原因
出于浏览器的同源策略的限制。
何为同源策略,为什么需要同源策略
同源策略是一种约定,也是浏览器最核心最基本的安全功能。所谓同源即协议、域名、端口相同。
同源策略存在的意义:
- 非同源下的 Cookie 等隐私数据可以被随意获取
- 非同源下的 DOM 可以被任意操作
- 如果 Ajax 或 Axios 可以随意请求,则会对用户的隐私造成泄露,引起不同程度的损失
了解了这些之后,我们来看下在 Midway 中,如何解决跨域
解决跨域
首先,我们需要安装依赖,这里我们使用 Midway 官方文档中的依赖。
1 | npm install @koa/cors |
之后在 configuration.ts 中启用
1 | /* |
到此,我们的跨域问题就解决了。最后我们对比一下,设置跨域和没有设置跨域的请求体有什么区别
可以看到,设置跨域的请求中,多了我们设置的属性
分环境运行
业务配置文件
一般情况下,项目都是多环境运行的,在 Midway 项目中,我们可以自定义目录,放入多个环境的配置文件,如下:
1 | . |
config.default.ts 为默认的配置文件,所有环境都会加载这个配置文件,一般也会作为开发环境的默认配置文件。
我们根据自己的需求,添加不同环境的配置文件即可
加载业务配置文件
业务配置文件添加之后,我们需要加载进来才可以。这里有两种加载配置文件的方式,我们来看一下吧。
对象形式加载
从 Midway V3 开始,主推的加载方式就是对象形式加载。
对象形式加载配置文件,配置文件必须显示指定添加,后续框架会根据实际的环境进行合并。如下:
1 | // src/configuration.ts |
importConfigs 的数组中传递配置对象,其中每个对象的 key 为环境,值为环境所对应的配置值,即我们 import 进来的文件。
指定目录或者文件
指定目录
指定目录,该目录里的所有的 config.*.ts 文件都会被加载。
1 | // src/configuration.ts |
指定特定的文件
我们可以手动指定一批文件,如下,把指定的文件的路径这样添加即可,但是这样需要注意一点就是如果该文件不存在,就会报错,所以一定要保证该文件存在。
1 | // src/configuration.ts |
上面我们提到过,框架会根据实际环境合并配置项,那么我们来了解一下配置文件的加载顺序以及合并规则。
配置文件加载顺序
默认都会先加载 default.config.ts 文件。
配置存在优先级(应用代码 > 组件),相对于此运行环境的优先级会更高。举个例子,比如 pro 环境下加载顺序,后加载的会覆盖前面的同名文件:
1 | -> 组件 config.default.ts |
配置文件合并规则
默认会加载 config.default.ts 文件以及 config.{环境}.ts 文件,比如:
在 pro 环境,会查找 config.default.ts 和 config.pro.ts 这两个文件,而其他环境则会查找 config.default.ts 和其对应的环境的文件。
这样其实简单的分环境运行就可以了。