node.js - 如何使用 koa 路由器复制和转发请求
问题描述
出于多种原因,我有一台服务器必须将请求转发到另一台服务器。响应应该是最终服务器的响应。我还需要在请求中添加一个额外的标头,但在返回之前再次从响应中删除此标头。因此,重定向不会削减它。
我目前正在根据需要手动复制标题和正文,但我想知道是否有一种简单的通用方法可以做到这一点?
解决方案
代理将为此工作。假设 @koa/router 或类似的东西和 http-proxy 模块(也有可能工作的 Koa 包装器模块:
const proxy = httpProxy.createProxyServer({
target: 'https://some-other-server.com',
// other options, see https://www.npmjs.com/package/http-proxy
})
proxy.on('proxyReq', (proxyReq, req, res, options) => {
proxyReq.setHeader('x-foo', 'bar')
})
proxy.on('proxyRes', (proxyRes, req, res) => {
proxyRes.removeHeader('x-foo')
})
router.get('/foo', async (ctx) => {
// ctx.req and ctx.res are the Node req and res, not Koa objects
proxy.web(ctx.req, ctx.res, {
// other options, see docs
})
})
如果您碰巧使用以下方式启动 Koa 服务器,您也可以将代理从路由中http.createServer
移除app.listen
:
// where app = new Koa()
const handler = app.callback()
http.createServer((req, res) => {
if (req.url === '/foo') {
return proxy.web(req, res, options)
}
return handler(req, res)
})
推荐阅读
- visual-studio-code - VSCode:向上/向下翻页保留光标垂直位置
- date - 报告日期选择问题
- android - 如何从 firebase 获取特定子值取决于日期(DAY)
- react-native - 使用 cookie 反应本机登录
- node.js - 无法从 express 表单中读取数据(返回 null)
- oracle - 在 WHERE 过滤器中使用“选择回合”时出错
- javascript - 将对象数组转换为按月和年分组的对象数组
- java - Java 以表为 IN 参数调用 PL/SQL 存储过程
- spring - 什么是 bean、IoC 和 DI?
- javascript - 核心模块是否应该在 Angular2 中导入共享模块