koa解决跨域问题

2023-05-16

    koa作为一个node http服务框架,它解决跨域问题,跟其他框架跨域类似,可以通过自定义中间件的方式对请求做处理,也可以通过使用封装好的@koa/cors依赖,两行代码搞定。

    现在模拟ajax跨域问题。

    准备:

        1. nginx 服务,配合静态页面,访问80端口,请求html页面,

        2. koa服务端,做接口访问,服务端口3000。

    ajax-cors.html

<!doctype html>
<html>
	<head>
		<meta charset="UTF-8"/>
		<title>ajax</title>
		<style>
			#root input{padding:10px;border:1px solid #ddd;color:#fff;border-radius: 3px;background: lightgreen;font-size: 16px;}
			#root .box{padding:5px;}
			#root textarea{width:800px;height:100px;resize: none;}
		</style>
	</head>
	<body>
		<div id="root">
			<div class="box">
				<input type="button" value="ajax-cors" onclick="handleclick()"/>
			</div>
			<div class="box">
				<textarea id="output"></textarea>
			</div>
		</div>
		<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
		<script>
			var base_url = "http://localhost:3000";
			function handleclick(){
				$.ajax({
					url:base_url+"/koa/test",
					type:"get",
					success:function(data){
						$("#output").val(JSON.stringify(data))
					},
					error:function(xhr,textStatus,errorThrown){
						$("#output").val(textStatus)
					}
				})
			}
		</script>
	</body>
</html>

    koa服务端代码:

    app.js

const Koa = require("koa")
const app = module.exports = new Koa()
const router = require("@koa/router")()
const path = require("path")
router.get("/koa/test",async (ctx,next)=>{
	console.log("ajax called.")
	var user = {id:101,name:"buejee",age:18}
	ctx.set("Content-Type","application/json")
	ctx.body = JSON.stringify({code:200,data:user})
})
app.use(router.routes())
if(!module.parent){
  app.listen(3000,function(){
     console.log("koa server running at port 3000");
  })	
}
  

    分别启动nginx,koa服务端,测试页面和接口:

    简单访问koa设定的接口,浏览器访问正常。

     

    koa服务控制台打印,显示调用一次接口:

    

    接着访问nginx下的静态页面,点击按钮,因为跨域,请求失败:

    

    koa解决跨域,前面提到,可以原生设置请求响应头,也可以通过依赖库@koa/cors两行代码搞定。

app.use(async(ctx,next)=>{
	ctx.set('Access-Control-Allow-Origin','*')
	ctx.set('Access-Control-Allow-Headers','Content-Type,Content-Length,Authorization,Accept,X-Requested-With')
	ctx.set('Access-Control-Allow-Methods','PUT,POST,GET,DELETE,OPTIONS')
	if(ctx.method=='OPTIONS'){
		ctx.body = 200;
	}else{
		await next()
	}
})

    或者增加这样的代码:

const cors = require("@koa/cors")
app.use(cors())

    跨域问题解决,页面效果:

     

    完整的代码:

const Koa = require("koa")
const app = module.exports = new Koa()
const router = require("@koa/router")()
const path = require("path")
const cors = require("@koa/cors")
app.use(cors())
/*
app.use(async(ctx,next)=>{
	ctx.set('Access-Control-Allow-Origin','*')
	ctx.set('Access-Control-Allow-Headers','Content-Type,Content-Length,Authorization,Accept,X-Requested-With')
	ctx.set('Access-Control-Allow-Methods','PUT,POST,GET,DELETE,OPTIONS')
	if(ctx.method=='OPTIONS'){
		ctx.body = 200;
	}else{
		await next()
	}
})*/
router.get("/koa/test",async (ctx,next)=>{
	console.log("ajax called.")
	var user = {id:101,name:"buejee",age:18}
	ctx.set("Content-Type","application/json")
	ctx.body = JSON.stringify({code:200,data:user})
})
app.use(router.routes())
if(!module.parent){
  app.listen(3000,function(){
     console.log("koa server running at port 3000");
  })	
}

    跨域请求中,简单请求会只发送一次请求,所以设置请求头就搞定了,但是复杂请求,比如POST请求,会先发送一个OPTIONS类型的探测请求,只有这个请求通过了,后续的真实POST请求才会发起,对于一般有鉴权的系统来说,OPTIONS请求不携带用户信息,所以对于一般OPTIONS请求会直接让它通过,不拦截,不鉴权,只有真实的请求才会进行拦截和鉴权。 

    

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

koa解决跨域问题 的相关文章

  • Vue+SpringBoot使用注解@CrossOrigin解决跨域问题

    背景 xff1a 前台vue使用本地8082端口 xff0c 后台使用8080端口 xff0c 这样前台访问后台时候就产生了跨域问题 这里是从后台解决跨域问题 span class token annotation punctuation
  • flask框架初学-11-解决跨域问题

    在前面的学习中 xff0c 我们都是在本地起服务 xff0c 再在本地访问资源及界面 xff0c 但是实际当中都是开启多台服务器 xff0c 提供给局域网外的用户访问 这就牵涉到了跨域问题 xff0c 跨域问题来源于同源策略 xff0c 同
  • koa解决跨域问题

    koa作为一个node http服务框架 xff0c 它解决跨域问题 xff0c 跟其他框架跨域类似 xff0c 可以通过自定义中间件的方式对请求做处理 xff0c 也可以通过使用封装好的 64 koa cors依赖 xff0c 两行代码搞
  • Springboot+vue解决跨域问题

    网络上的答案很多都感觉很麻烦 xff0c 我们这边从后端配置即可 xff0c 建一个配置类便可以解决 注意一点 xff1a 设置访问原地址时 xff0c 也就是我们的前端页面原地址 xff0c 我的为 xff1a http localhos
  • Egg简介

    Egg 前言 Egg js 为企业级框架和应用而生 基于Koa开发封装 性能优异 内置多进程管理 具有高扩展性 且提供了基于Egg定制上层框架的能力 帮助开发团队降低了开发维护成本 约定先于配置 相较于express更加灵活可配 Koa K
  • koa返回前端响应后,后台静默做其他操作

    需求描述 后端使用Koa框架 需要接收到请求后立即给予前端响应 后续由后端继续做其他异步调用API的操作 遇到的问题 Koa中返回前端响应的方式有两种 一种是直接return你需要的响应参数 另一种则是设置响应body 接口方法走完后就会自
  • AI,v3,百度人脸识别库上传---node

    config有必要的grant type client id client secret var https require https var request require request var qs require querystr
  • koa文件上传(详解koa-body)

    koa body const koa require koa const koaBody require koa body const path require path const app new koa let app new Koa
  • NodeJS分别实现token、cookie登录注册鉴权(KOA2)

    源码 https github com NaCl 131 node study git 包 npm install koa npm i nodemon D 保存自动更新 npm i koa router 路由 npm i koa body
  • express和koa中的超时处理

    从某个话题中得到的灵感 这里做一个分享 http cnodejs org topic 592fdc2f03dba3510d8a62a0 59364c3b538dbcaa6bc7dd48 楼主遇到一个问题 如何管理express中的超时 ex
  • 【Vue + Koa 前后端分离项目实战9】使用开源框架==>快速搭建后台管理系统 -- part9 项目总结

    去读书 去学一门手艺 去做任何自己喜欢的事 永远不会晚 才不会辜负这份人生 本博客教学视频来源于imoom 0到1快速构建自己的后台管理系统 课程 官方演示地址 https talelin com 目录 一 项目介绍 1 技术准备 2 学到
  • 如何配置 WebStorm 为 KoaJS 提供代码补全?

    目前 WebStorm 报告 KoaJS 的方法未定义 这是一个轻微但持续的烦恼 我在网上搜索过 也搜索过WebStorm的配置对话框 但没有结果 有人将 WebStorm 与 KoaJS 一起使用并且智能感知 代码完成正常工作吗 这是一个
  • Google Cloud Functions、Node JS 8.9.x (LTS) 和 KOA 库

    我该如何使用KoaCloud Functions 中的库 快速替换 我知道 KOA 使用所有很棒的 ES2017 并更多地使用 JavaScript 的异步使用 或者可能根本不需要使用 Cloud Functions 因为 Firebase
  • 无法获取店铺名称

    在以前的版本中我用来获取当前商店名称是这样的 router get api app async ctx gt let shop ctx session shop 但是 在新版本中 我无法使用 ctx session shop 获取当前商店名
  • Koa.js - 提供静态文件和 REST API

    我是 koa js 库的新手 我需要一些帮助 我正在尝试使用 koa 制作简单的 REST 应用程序 我有一个静态 html 和 javascript 文件 我想在路线上提供服务 和 REST API 访问 api 这是我的项目目录树 pr
  • 使用 koa.js 显示静态 html 文件

    我想要做的是在调用索引路由 即 localhost 3000 时提供 index html 文件 我使用 koa router 进行路由 所以我的路线如下所示 app all function next Send the file here
  • Koa 发送响应后运行代码

    为了优化响应延迟 需要执行以下工作after响应已发送回客户端 但是 我似乎可以在发送响应后运行代码的唯一方法是使用setTimeout 有没有更好的办法 也许在发送响应后在某个地方插入代码 或者在某个地方异步运行代码 这是一些代码 koa
  • OpenShift 无法处理某些 Nodejs 依赖项 (Koa)

    我已经结账了如何在 Openshift 中设置 KoaJS https stackoverflow com questions 26924967 how to setup koajs in openshift但它仍然不起作用 这是我的一部分
  • 我可以在自定义(例如 /static/)路径上提供 koa-static 服务资源吗?

    文档位于https github com koajs static https github com koajs static我个人尝试 koa static 的经历让我相信你可以only从应用程序的根 URL 提供文件 例如 app us
  • 如何在http请求中设置边界?

    我正在尝试在 Ajax 请求中发送多部分 表单数据 我正在使用 node busboy 来解析多部分数据 但它一直抛出错误 Error Multipart Boundary not found 我读过了here https stackove

随机推荐

  • c语言自定义tcp协议实现socket通信

    一般的tcp协议示例 xff0c 大家给出的demo都是类似一个helloworld的示例 xff0c 简单罗列了socket建立 xff0c 创建连接 xff0c 发送数据 xff0c 关闭连接的过程 xff0c 实际上tcp通信确实也就
  • c语言自定义tcp协议实现socket通信(windows版本)

    前面一篇博客介绍了mac linux下通过C语言自定义协议实现socket通信的示例 xff0c 因为大部分api与windows还有很多区别 xff0c 这里就特意把windows下的tcp通信实例给介绍一下 无论是linux xff0c
  • macos升级体验

    周末在家里把macos从10 11 6版本升到了10 14 6版本 xff0c 其中的过程基本大同小异 后面想继续升级 xff0c 发现遇到了问题 网上有的说需要一步一步来升级 xff0c 如果是10 11 xff0c 需要先升级到10 1
  • xcode开发c语言开启多target

    xcode开发c语言 xff0c 在选择project template时选择command line tool xff0c 后面填入product name xff0c 最后选择存储位置就可以了 但是一般而言c语言项目只有一个main函数
  • vaex 将csv转换为hdf5

    I have a massive CSV file which I can not fit all into memory at one time How do I convert it to HDF5 We are working to
  • ubuntu1804源码编译jdk8

    这里纯粹自己弄着玩 xff0c 因为以前没有成功过 xff0c 这里记录一下 xff0c 就是让遇到问题的人可以规避问题 xff0c 快速编译自己的jdk 相信很多学java的人都看过或者了解过一本书 深入理解java虚拟机 xff0c 里
  • vmware安装minix并开启x11

    最近突然想弄一下minix这个老牌的系统 vmware安装minix3虚拟机 xff0c 其实很简单的 xff1a 1 新建虚拟机 xff0c 选择经典 2 选择客户机操作系统 xff1a 其他 xff0c 版本 xff1a 其他 64位
  • minix3通过pkgin_cd安装二进制包

    在安装完minix3虚拟机之后 xff0c 如果要进行其他工具的安装 xff0c 默认需要借助pkgin xff0c 这个需要先更新 pkgin up xff0c 然后安装各种可以被下载的包 本人试了几次之后 xff0c 发现pkgin i
  • clang: error: unable to execute command: Executable “ld“ doesn‘t exist!

    如题所示 xff0c 我在minix3中直接安装了clang xff0c 然后使用如下命令编译c程序报错 clang hello c o hello clang error unable to execute command Executa
  • c语言结构体内存对齐问题

    c语言中结构体使用是非常广泛的 xff0c 但是结构体有一个问题 xff0c 就是如果开头的字段属性是字符类型 char xff0c 紧跟着的是其他类型 xff0c 比如整型 长整型 双精度 浮点型 xff0c 这时候结构体的大小会发生改变
  • java通过jni调用native method

    jdk中规定了native method xff0c 每一个native method背后对应有一个动态链接库来支持它 xff0c 在windows系统上 xff0c 就是dll后缀的文件 native method是需要通过c c 43
  • minix3下安装libevent

    libevent是一个c语言编写的事件框架 xff0c 支持异步IO 定时器 信号事件 它支持跨平台 xff0c 大部分都是在linux下安装并使用 xff0c 今天介绍在unix系统minix3上的安装 minix3上编译环境是clang
  • win10启动命令行之前执行命令

    这个问题的引出 xff0c 是我在win10上设置cmd命令行字体的问题 xff0c 我之前在win7上设置过cmd终端命令行字体 xff0c 通过更改注册表 xff0c 然后设置想要的字体 xff0c 就可以达到效果 xff0c 可是在w
  • Dynamic Linking Error: Win32 Error 126问题排查

    如题所示 xff0c 这个问题是我在electron项目中使用ffi调用动态链接库出现的 xff0c 本机运行都好好的 xff0c 打包构建然后放到别的机器上运行出错 这个问题一度也让我很迷茫 xff0c 如果是路径导致的这个问题 xff0
  • npm安装windows-build-tools一直卡在successfully installed python2.7不动

    以前安装过windows build tools xff0c 很顺利的 xff0c 没想到最近在别的机器上安装 xff0c 出现了卡住不动的情况 xff0c 就是如题的问题 其实这个问题出现在执行vs BuildTools exe安装问题上
  • C++学习笔记一 —— 两个类文件互相引用的处理情况

    先记录一些零碎的知识点 xff1a 1 一个类可以被声明多次 xff0c 但只能定义一次 xff0c 也就是可以 class B class B class B class B 这样子 2 一个类 C 的声明中 xff08 函数只声明还没定
  • koa设置静态资源以加载html页面

    koa是express之后又一个node框架 xff0c 它可以很方便的构建http服务 一般 xff0c 我们看到的koa是配合koa router路由来做服务端请求控制 xff0c 大部分是要么返回string xff0c 要么返回js
  • springboot实现jsonp

    jsonp是ajax跨域解决方案的一种办法 xff0c 就是借助标签 lt script gt lt script gt 可以实现不同域之间数据请求的一种方式 xff0c 类似iframe xff0c 不受跨域限制 xff0c 它请求返回之
  • koa利用koa-views通过路由返回html页面

    前面一篇博客介绍了koa借助koa static依赖可以实现以静态资源的形式加载html xff0c 但是没有路由功能 xff0c 一般而言 xff0c 前后端分离之后 xff0c 路由控制是由前端控制 xff0c 也有一些不分离的项目 x
  • koa解决跨域问题

    koa作为一个node http服务框架 xff0c 它解决跨域问题 xff0c 跟其他框架跨域类似 xff0c 可以通过自定义中间件的方式对请求做处理 xff0c 也可以通过使用封装好的 64 koa cors依赖 xff0c 两行代码搞