koa——跨域 CORS 问题解决、跨域调试

本贴最后更新于 1462 天前,其中的信息可能已经事过景迁

在使用 koa 开发 nodejs 应用时,碰到跨域问题,即本地进行前端开发时,不能请求已经部署在某个域名下的接口。使用 koa-cors 和 koa2-cors 发现并没有效果。
也许是我用 koa 不多,感觉 koa 不是很好用很完备。比如没发指定当前的基础路径,需要文件结构配合,比如使用 koa-cors 或 koa2-cors 发现并没有解决跨域问题——没有设置上允许跨域的源,只能自己手写一个 cors 解决跨域的问题。

这里写一下 cors 函数的代码

const REG_WHITE_LIST = /^https?:\/\/(?:[0-9a-zA-Z-]+\.)*\.(?:ws|biz|com)(?::\d+)?$/; // 这里写上想要匹配的域名 module.exports = async function cors (ctx, next) { const origin = ctx.get('Origin'); if (origin && REG_WHITE_LIST.test(origin)) { ctx.set('Access-Control-Allow-Origin', origin); // 允许跨域 ctx.set('Access-Control-Allow-Methods', 'POST,GET,OPTIONS,HEAD,PUT,DELETE'); // 支持的方法 ctx.set('Access-Control-Allow-Credentials', 'true'); // 允许传入Cookie ctx.set('Access-Control-Max-Age', 2592000); // 过期时间一个月 // 如果有特殊的请求头,直接响应 if (ctx.get('Access-Control-Request-Headers')) { ctx.set('Access-Control-Allow-Headers', ctx.get('Access-Control-Request-Headers')); } // FIX:浏览器某些情况下没有带Origin头 ctx.set('Vary', 'Origin'); // 如果是 OPTIONS 请求,则直接返回 if (ctx.method === 'OPTIONS') { ctx.status = 204; return; } } await next(); };

将上述 cors 函数直接在 koa 的实例里面使用。就可以跨域了。

const app = new Koa(); app.use(require("./cors.js"));

ps:受伤没有前端项目,想试一试自己写的跨域对不对怎么办?
这里给大家放上一段代码,直接在工作台的 console 的使用 XMLHttpRequest。

var httpRequest = new XMLHttpRequest(); httpRequest.open('GET', 'https://xxxx.com/api', true); httpRequest.withCredentials =true; // 携带cookie信息 httpRequest.send();

执行之后,httpRequest.response 即可查看返回的信息。

详细内容看 https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest

从上面的代码可以看出,不论是否跨域,服务都会接收到请求,并且能够访问请求的所有信息,而且服务器会去处理该请求,并返回相关信息。

  • CORS
    10 引用 • 56 回帖
  • Koa
    3 引用 • 9 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • OneNote
    1 引用 • 3 回帖 • 3 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 3 关注
  • 电影

    这是一个不能说的秘密。

    123 引用 • 608 回帖
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 43 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 1 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 100 回帖
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    77 引用 • 37 回帖
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 2 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26759 引用 • 111516 回帖
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖 • 2 关注
  • RemNote
    2 引用 • 16 回帖 • 25 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 1 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1444 引用 • 10083 回帖 • 501 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 727 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 118 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    167 引用 • 597 回帖 • 2 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 2 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    85 引用 • 324 回帖
  • 叶归
    15 引用 • 63 回帖 • 26 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 676 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 476 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 26 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    187 引用 • 3914 回帖
  • V2Ray
    1 引用 • 15 回帖 • 5 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 367 回帖