Koa代理问题

背景介绍:Koa.js 是一个流行的 Node.js 后端框架,它旨在提供一种更简单、更强大、更有表现力的方式来构建 Web 应用程序和 API。Koa.js 是 Express.js 的继任者,由 Express.js 的团队创建,并在许多方面提供了更现代和强大的工具。

在聊Koa的代理问题之前我先介绍一下起因。我司在做一个多项目的整合工作,就是把原先多个项目打包成一个。这就涉及到请求工具类的整合(比如Axios),每个子项目之前分别存在自己的接口地址比如A项目接口地址www.aaa.com, B项目接口地址www.bbb.com 。这里我是通过为api加不同的前缀来进行区分。

在开发阶段我们可以通过webpack-dev-server启动代理服务来搞定

js 复制代码
  devServer: {
    proxy: {
      // 设置服务器代理
      '/a': {
        target: `http://www.aaa.com`
      },
      '/b': {
        target: 'http://www.bbb.com',
      }
    }
  }

但是如果是生产环境我们应该怎么处理呢?我们可以选择通过第三方工具进行代理,如:nginx。笔者这里使用Koajs进行代理,原因是项目内部本身就存在Koa项目服务所以不需要引入额外的工具来完成代理功能。 下面我们来创建一个简单的koa应用

一、安装

Koa 依赖 node v7.6.0 或 ES2015及更高版本和 async 方法支持.

你可以使用自己喜欢的版本管理器快速安装支持的 node 版本:

ruby 复制代码
$ npm init -y
$ npm i koa
$ node my-koa-app.js

编写项目代码

js 复制代码
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const App = new Koa();

App.use(bodyParser());

App.use(async ctx=>{
    ctx.body=ctx.request.body
})

App.listen(3000)

代码运行良好,为了进行代理 这里采用 http-proxy-middleware

js 复制代码
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const { createProxyMiddleware } = require('http-proxy-middleware');
const App = new Koa();

const proxyMiddleware = createProxyMiddleware('/a', {
    target: 'https://v1.jinrishici.com/siji.txt',
    changeOrigin: true,
    pathRewrite: {
        '^/a': '/', // rewrite path
    },
  })

App.use(proxyMiddleware);
App.use(bodyParser());

App.use(async ctx=>{
    ctx.body=ctx.request.body
})

App.listen(3000)

不出意外的报错了,这是因为Koa 中没有 next,所以肯定会报,那要怎么解决?这里我引入了插件koa2-connect来兼容Koa。

这里采用的诗词接口是**v1.jinrishici.com/siji.txt** 代码范例如下:

js 复制代码
const Koa = require('koa');
const c2k = require('koa2-connect');
const bodyParser = require('koa-bodyparser');
const { createProxyMiddleware } = require('http-proxy-middleware');
const App = new Koa();

const proxyMiddleware = createProxyMiddleware('/a', {
    target: 'https://v1.jinrishici.com/siji.json',
    changeOrigin: true,
    secure: false,
    pathRewrite: {
        '^/a': '', // rewrite path
    },
  })

  App.use(bodyParser());
  App.use(c2k(proxyMiddleware));

App.use(async ctx=>{
    ctx.body=ctx.request.body
})

App.listen(3000)

PS 注意之前本人在项目中遇到过该方法报错的问题本人目前无法通过demo重现,项目中的解决方式是将App.use(bodyParser())放在proxyMiddleware之后

相关推荐
lbh6 小时前
当我开始像写代码一样和AI对话,一切都变了
前端·openai·ai编程
We་ct6 小时前
LeetCode 918. 环形子数组的最大和:两种解法详解
前端·数据结构·算法·leetcode·typescript·动态规划·取反
qq_406176147 小时前
深入浅出 Pinia:Vue3 时代的状态管理新选择
javascript·vue.js·ecmascript
wefly20177 小时前
m3u8live.cn 在线M3U8播放器,免安装高效验流排错
前端·后端·python·音视频·前端开发工具
C澒7 小时前
微前端容器标准化 —— 公共能力篇:通用打印
前端·架构
德育处主任Pro8 小时前
前端元素转图片,dom-to-image-more入门教程
前端·javascript·vue.js
木斯佳8 小时前
前端八股文面经大全:小红书前端一二面OC(下)·(2026-03-17)·面经深度解析
前端·vue3·proxy·八股·响应式
陈天伟教授8 小时前
人工智能应用- 预测新冠病毒传染性:04. 中国:强力措施遏制疫情
前端·人工智能·安全·xss·csrf
叫我一声阿雷吧8 小时前
JS 入门通关手册(23):JS 异步编程:回调函数与异步本质
javascript·es6·前端面试·回调函数·回调地狱·js异步编程·异步本质
zayzy8 小时前
前端八股总结
开发语言·前端·javascript