持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情
系列介绍
该系列主要是介绍一些nodejs相关的基础知识,没有什么特别难的知识点,都是一些比较基础知识点。大家学习起来,也会比较容易理解和接收。
这些知识点,也是以前自己学习nodejs的时候,学习过的知识点。有些知识点,可能是由于学习的时间比较久了,也有可能是平时工作中用到的机会比较少,也差不多快把它们都忘记掉了。现在把它们都写下来,写成文章,一方面是记录下自己以前学习的nodejs知识点,一方面也是复习巩固自己以前学习的nodejs知识点。不要学着学着,就把以前的知识点都忘光了。
环境安装
实现之前,你首先需要安装nodejs环境。因为我们写的代码需要在node环境上运行,如果你没有,那么文件会运行不了。
以下是nodejs的安装地址,如果你没有安装的话,可以先把它安装上。安装了可以忽略这一步,跳到下面一步。
前言
在上一篇文章里nodejs系列:23.koa 中间件,介绍了koa里的中间件是什么。
在koa框架里,中间件的本质是一个回调函数,参数包含请求对象、响应对象和执行下一个中间件的函数
中间件是什么已经介绍了,在接下来的几篇文章里,介绍一下koa里常用到的一些中间件。
本篇文章,就介绍一下koa常用中间件:跨域中间件--koa-cors
跨域
在nodejs系列:4.http 服务器配置跨域这篇文章里,我们介绍了什么是跨域:
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。
为什么会出现跨域
这是出于浏览器的同源策略限制。同源策略是一种约定,是浏览器最核心、最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。
怎么解决跨域?
当时给出的方案是,利用http服务器给响应请求设置请求头即可
res.setHeader('Access-Control-Allow-Origin', '*')
res.setHeader('Access-Control-Allow-Headers', 'X-Rquested-With')
res.setHeader('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS')
除此之外,还有没有其它解决方法?
有,那就是利用koa-cors这一中间件来解决跨域问题。
使用
html页面
创建一个index.html文件,在里面发送一个ajax请求
<script>
let xhr = new XMLHttpRequest()
xhr.open('get','http://localhost:3000/index')
xhr.onreadystatechange= function (){
if(xhr.readyState == 4){
console.log(xhr.responseText);
}
}
xhr.send()
</script>
node服务器
创建文件,引入koa
创建一个index.js文件,引入koa,实例化koa对象
const koa = require("koa")
const app = new koa()
创建中间件
app.use(async (ctx, next) => {
ctx.body = "返回数据"
})
创建一个中间件,设置响应请求的响应内容为--返回数据
启动服务器
app.listen(3000, () => {
console.log("服务器启动了")
})
在cmd里,用node运行index.js文件,启动node服务器
运行上面创建好的index.html页面,打开页面就会发送get网络请求。打开浏览器,到控制台查看打印日志
又遇到了我们熟悉的跨域问题了,没关系,我们可以利用koa-cors这一中间件来解决这个跨域问题。
安装koa-cors
npm install koa-cors
引入koa-cors
const cors = require("koa-cors")
使用中间件
app.use(cors())
在cmd里,用node重新运行index.js文件
到浏览器里,刷新一下页面
我们可以看到,没有报跨域错误了。并且把返回结果返回数据也打印出来了。
小结
本篇文章主要介绍了koa-cors这一中间件,并且使用一个小示例,来演示了怎么使用koa-cors中间件。
同时,也可以看到,使用koa-cors这一中间件,解决跨域问题是比较简单方便的。
最后,放上自己比较喜欢的一句诗句:
千淘万漉虽辛苦,吹尽狂沙始到金 - 唐 刘禹锡《浪淘沙》