当前位置: 首页 > 软件库 > Web应用开发 > Web框架 >

koa2-proxy

授权协议 Readme
开发语言 JavaScript
所属分类 Web应用开发、 Web框架
软件类型 开源软件
地区 不详
投 递 者 呼延俊风
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

基于koa2的代理工具

功能

  • 代理http和https
  • 转发本地请求到网络
  • 本地服务器
  • 本地模拟数据配置
  • 解析smarty模板
  • 随意修改请求和响应结果

安装

安装node之后执行

npm install koa2-proxy

使用

var proxy = require('koa2-proxy');

// 本地静态服务器
proxy.static(__dirname);

// 本地模拟文件
proxy.mockfile(__dirname + '/mockfile.txt');

// 解析smarty模板
proxy.smarty({ext: '.html', data: {data: 'smarty html'}});

// 转发请求到指定host
proxy.when('/api', function(ctx) {
    ctx.request.host = 'www.test.com';
    ctx.request.protocol = 'http';
});

// 配置代理请求结束后修改body
proxy.when({'.html', phase: 'response'}, function(ctx) {
    ctx.response.body += '<div>test</div>';
});

// 请求开始时转发本地请求到网络
proxy.on('start', function (ctx) {
    console.log('start: ', ctx.request.url, ctx.isLocal());
    ctx.request.host = 'www.koa2.com';
});
// 请求结束时输出状态
proxy.on('end', function (ctx) {
    console.log('end: ' + ctx.response.status);
    console.log('end: ' + ctx.response.get('content-type'));
    // console.log('end: ' + ctx.response.body);
});

// 监听端口
proxy.listen(3010);

增加属性

  • proxy.app koa的实例:proxy.app = new koa();
  • proxy.httpServer http服务器, 只有当http服务器启动后才会赋值(http-server-start事件)
  • proxy.httpsServer https服务器, 只有当http服务器启动后才会赋值(https-server-start事件)
  • proxy.localip 本地ip地址,listen后生效
  • proxy.localhost 本地ip地址+监听host, listen后生效
  • ctx.proxy proxy
  • request.body 请求的form表单数据

增加函数

  • proxy.static(root,opts) 静态文件服务器
  • proxy.when(conditions,callback) 增加中断和处理内容
  • proxy.mockfile(mockfile) 模拟文件路径
  • proxy.smarty({ext:'',data:data}) 解析smarty模板,data可以是json数据或者func,func参数为文件路径
  • proxy.listen(port|config) 启动监听端口,假如需同时启动https,可以proxy.listen({port:3000,https:true}),则会自动增加https监听
  • ctx.hasSend() 判断是否发送过数据
  • ctx.isLocal() 判断当前请求是否是请求本地文件
  • ctx.isBinary(filename) 判断本地文件是否是二进制文件
  • ctx.sendFile(filepath) 发送本地文件

事件(proxy.on(event,function(data){}))

  • http-server-start http服务器启动完成后触发
  • https-server-start https服务器启动完成后触发
  • start: 请求开始时触发
  • end: 请求结束时触发

本地开发

执行npm install 安装依赖执行npm run build 编译src到lib目录

注意问题

  • ctx.request.host不能直接修改,需要通过ctx.request.header.host修改

api详细解释

proxy.listen(3000)

启动监听端口,启动http和https服务器和代理,默认不启动https代理

  • {number|object} config 当为number时,表示http服务器端口号,默认3000。当为object时,存在下列参数
  • {number} config.port http服务器端口号
  • {boolean} config.https 是否启动https代理,默认不启动
  • {string} config.loadCertUrl 下载密匙的链接,只要配置代理后访问带有该链接的地址就可以下载密匙,默认: proxy.com
  • {string} config.key https服务器的密匙,可省略
  • {string} config.cert https服务器的公匙,可省略(密匙和公匙必须配对)
  • {function} callback 启动http服务器后的回调函数,参数err

示例:

var proxy = require('koa2-proxy');
proxy.static(__dirname + '/output/');
proxy.listen(8000);

示例:

// 启动https代理,则可以如下配置
var proxy = require('koa2-proxy');
proxy.static(__dirname + '/output/');
proxy.listen({port: 8000,https: true});

proxy.when([condition,] callback)

当请求的内容和condition匹配时,执行callback

  • condition{string|reg} condition url包含string或者reg.test(url)为tru时,将执行callback{object} condition 匹配条件列表,其属性值可以是header的字段或者host,fullUrl,url,phase,method等- {string|reg|function} condition.url 匹配url(host之后的部分)- {string|reg|function} condition.fullUrl (匹配)- {string} condition.phase 匹配阶段,request或者response,默认request- {string|reg|function} condition.cookie- {string|reg|function} ... 匹配其他任意header字段
  • {function} callback 匹配时执行的函数,参数ctx

示例: test.html的内容设置为test

proxy.when('test.html',function(ctx){
    ctx.response.body = 'test';
});

示例: test.html的内容增加一个div

proxy.when({url:'test.html',phase: 'response' },function(ctx){
    ctx.response.body +='<div>test</div>';
});

proxy.index('/index.html')

浏览根网址时自动跳转到指定地址

  • {string} url 跳转地址,默认/index.html

proxy.mockfile(mockfile, needLocal)

匹配规则之后发送模拟数据,主要用来mock请求数据

  • {string} mockfile 匹配规则文件路径匹配规则说明匹配规则对应文件只有以下列单词开头的行才会匹配规则,其他任何内容开头将作为注释root folder # 指定根目录(其他文件地址相对mockfile文件地址)rewrite reg rewriteUrl #匹配到正则,发送文件replace reg replaceWith #修改请求url,替换reg的内容为replaceWithredirect reg redirectUrl #匹配到正则,则转发到新的urlexec reg execFile
  • {boolean} needLocal 是否需要是本地请求,默认true,主要用来避免代理时污染代理请求

示例: 配置某个文件作为模拟规则文件

proxy.mockfile(__dirname + '/server.conf');

示例: 部分路径不使用模拟文件配置

proxy.when('/test1/',function (ctx) {
    ctx.mockfile = false;
});
proxy.mockfile(__dirname + '/server.conf');

proxy.open('/index.html')

使用浏览器打开指定网页,假如不指定域名,则会使用localhost和监听端口(listen调用时的监听端口)

  • {string} url 打开的网址

proxy.static(root, opts)

创建静态文件服务器

  • {string} root 静态文件根目录
  • {object} opts 其他可选参数- opts.path {string} 匹配的路径,匹配到该路径时,匹配后剩余的路径存在文件时才发送文件,默认为空- opts.index {string|array} 假如浏览的是目录,则自动发送其下存在的文件,默认为index.html,可以指定多个文件,例如["index.html","index.htm"]- opts.list 当浏览的是目录并且不存在默认发送文件时,发送目录下文件列表- {boolean} 是否发送文件列表- {string} 内容不为空时发送,opt.list将一起发送- {function} 自定义发送内容格式,参数(list, pathname, localFolder)

示例:

proxy.static(__dirname + '/output', {path: '/static/', index: 'index.html'});

版本更新(使用lazy-doc打包自doc/history.md)

  • 1.1.7(2017.11.09)
    • fix: issues/5 文件读取函数错误;转发application/json格式
  • 1.1.6(2017.11.09)
    • fix: issues/4 修改protocol不生效的问题
  • 1.1.4(2017.09.15)
    • feat: 使用mime-types计算文件的content-type
    • fix: 部分文件类型计算问题,form-data判定问题
  • 1.1.3(2017.08.03)
    • fix:上传文件bug
  • 1.1.2(2017.07.31)
    • fix无文件时body错误
  • 1.1.0(2017.07.27)
    • 静态资源文件夹路径增加斜线
    • 使用koa-match替代内置when
    • 上传文件处理
  • 1.0.17(2017.03.01)
    • 增加函数proxy.index,浏览根目录时自动跳转
  • 1.0.16(2017.03.01)
    • 增加函数proxy.open,自动打开浏览器
  • 1.0.15(2017.02.23)
    • 完善dependencies
  • 1.0.14(2016.12.29)
    • 使用.npmignore配置npm发布时目录
  • 1.0.13(2016.12.06)
    • mockfile第二个参数的needLocal默认值改为false
    • ctx.mockfile设为false时将不使用模拟配置
  • 1.0.12(2016.10.18)
    • 取消版本检查
    • 删除加载数据header的content-length
    • 文件列表样式
  • 1.0.11(2016.08.18)
    • proxy.static增加显示文件夹内文件列表
  • 1.0.10(2016.08.12)
    • 使用lazy-doc生成文档
    • when增加支持method和host等
    • when(condition,callback)的condition可以忽略,这时所有的请求都将调用callback
  • 1.0.9(2016.08.11)
    • 检查是否存在新版本并提示
    • 修复一些bug;
  • 1.0.5(2016.07.26)
    • proxy.smarty({ext:,root:,data:}): 完善smarty函数
  • 1.0.4(2016.07.22)
    • proxy.when(conditions, callback):参数conditions增加local
    • proxy.static(root, opts): 参数opts增加path和index
  • 1.0.3(2016.07.15)
    • 增加request.body
    • 请求form发送
    • 增加proxy.localip和proxy.localhost
    • 默认取消监听https,只有显示指示https时才启动https
  • 1.0.2 load模块bug修复
  • 1.0.1 增加proxy.when等函数,远程加载图片内容
  • 1.0.0 代理功能
  • 方法1:设置CORS允许跨域 app.js const Koa = require('koa'); const bodyParser = require('koa-bodyparser'); //post数据处理 const router = require('koa-router')(); //路由模块 const cors = require('./libs/koa-cors'); //跨域处

  • //constructor constructor() { super(); this.proxy = false; this.middleware = []; //中间件栈 this.subdomainOffset = 2; this.env = process.env.NODE_ENV || 'development'; this.context

  • koa项目中  安装插件svg-captcha npm i --save svg-captcha src\api\captcha.js const svgCaptcha = require('svg-captcha'); function getCaptcha(ctx) { // 若创建算数式验证码,将create改为createMathExpr const newCaptch

  •     最近在写xmocker的工具,用于开发前期的mock数据,不可避免的用到了代理的中间件。当然,github上有关于http-proxy封装的中间件。毕竟是自己练手的项目,就自己写了个中间件,方便定制功能。     http-proxy库用于koa中,是使用它的 proxy.web方法。常规的用法是: proxy.web(req, res, { target: 'http://mytarge

  • 现在正式进入koa源码,找到koa文件下/lib/application.js文件 一、依赖项 const isGeneratorFunction = require('is-generator-function'); //判断是否为generator方法 const debug = require('debug')('koa:application'); // debug命名空间 const o

  • 我们在使用koa2做路由拦截后一般都习惯于直接将查找对应处理函数的过程映射到项目的文件夹目录,如: router.get('/test', app.controller.index.test); app.controller.index.test 其实就是对应的处理函数,也就是 (ctx, next) => { },我们习惯于将app.controller.index.test映射到根目录下的 

  • 1. 简介 Koa是由Express原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的Web框架,使用Koa编写web应用,通过组合不同的generator,可以免除重复繁琐的回调函数前腰,并极大地提升错误处理的效率。Koa不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写Web应用变得得心应手。 2. 安装koa-generator 安装:npm install k

 相关资料
  • Koa2-blog(有问题可以加qq群:725165362) node+koa2+mysql (欢迎star) 现在最新的代码有变动,请参照最新的代码,新增了上传头像、分页、markdown语法等 教程 Node+Koa2+Mysql 搭建简易博客 创建数据库 登录数据库 $ mysql -u root -p 创建数据库 $ create database nodesql; 使用创建的数据库 $

  • Koa2 Boilerplate 这是团队近两年的 Koa2 + ES 2017 做 API 项目的最佳实践,项目中用到一些新的 Feature,并完成了从 request 到 service 和 DB(Sequlize)到 response 的全部流程。同时也包含了一些基本的 middleware。 项目用到的功能 �� Koa2 & koa-router Koa 相对于 Express 更吸引

  • koa2-winston koa2 version winston logger like express-winston Add logger to your koa2 server in 3 lines 中文介绍 koa2-winston Usage Installation Quick Start Configuration Examples Do not record any reques

  • 注意: 请使用Node6以上版本,获得更好的性能与ES6支持。启用Babel-es2017,不再对一些Node6已支持的特性转码。 起因 因为Koa2已经在蓬勃发展中,Async/Await能切实的避免回调地狱。所以基于Koa2订制了一套模板。 全局安装koa2-easy,之后使用koa2命令即可在当前目录一键生成服务端程序。地址为:当前目录/koa2-easy npm i koa2-easy -

  • 《Koa2进阶学习笔记》已完结 序言 从2017年2月份开始写这本开源电子书,是为了记录自己的学习轨迹和分享技术心得,本开源书的Koa2的基础进阶教程已经完结,更多的Koa.js的高阶学习会在后续新开几本书进行探索。感谢这一年来所有读者的关注!O(∩_∩)O。 本书为Koa.js 2.x 的入门书籍,如果想了解更多 Koa.js 的原理,可阅读 《Koa.js 设计模式-学习笔记》 更多前端技术学

  • Koa2 RESTful API 服务器脚手架 这是一个基于 Koa2 的轻量级 RESTful API Server 脚手架,支持 ES6。 约定使用 JSON 格式传输数据,POST、PUT、DELET 方法支持的 Content-Type 为 application/x-www-form-urlencoded、multipart/form-data、application/json可配置支持