跳转到内容
加入 「福强私学」,学习和了解更多关于技术、管理与人生的精彩内容。

在HonoJS里如何对Web请求进行转发或者代理给外部服务?

假如我们要在honojs的handler里对外部请求进行转发,那么,直觉上是使用下面的代码:

const response = await fetch(c.req.raw) // "TypeError: Can't modify immutable headers."
return response

理想很丰满,但现实很骨感,上面的代码会出现运行期错误:

"TypeError: Can't modify immutable headers."

即使我们没有对原始请求或者返回的响应做任何变更,依然会出现以上问题,要解决这个问题,需要对请求和响应(主要是响应)进行重新封装:

const request = new Request(c.req.url, {
headers: {
...c.req.raw.headers
}
})
const response = await fetch(request)
// return response // "TypeError: Can't modify immutable headers."
return new Response(response.body, response)

这样,就不会出现以上的报错了。

而且,我们可以在转发前对请求做进一步的修改,比如增加更多header:

const request = new Request(c.req.url, {
headers: {
...c.req.raw.headers,
'custom_header':'any value'
}
})
const response = await fetch(request)
...

对于收到响应之后,也同样可以对新封装的Response增减内容。

honojs的官方文档中也有相关说明: https://hono.dev/guides/examples#proxy,我是在调试cloudflare worker的时候碰到的类似问题。

加入「福强私学」

学习和了解更多关于技术、管理与人的精彩内容。

如果已经购买「福强私学」,可以直接点击这里开始访问

©️王福强个人版权所有