gpt4 book ai didi

typescript - 模拟 Node Js 代理

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:11 24 4
gpt4 key购买 nike

我正在使用 typescript 开发一个 Node.js/express 应用程序,其中包含一个代理路由,该路由具有一些自定义业务逻辑来确定代理 url:

import proxy from "http-proxy-middleware";

const controller = diContainer.get<IController>(TYPES.Controller);
const app = express();
app.use("/customProxy", controller.handleProxy());

@injectable()
export class Controller implements IController {
public handleProxy(): RequestHandler {
return proxy(
"**", // proxy all incoming routes
{
router: (req: Request) => {
// custom logic to translate route
return customRouteBasedOnIncomingRequest;
},
onProxyRes: (proxyRes: http.IncomingMessage, req: http.IncomingMessage, res: http.ServerResponse) => {
// custom logic to set outgoing response
res.setHeader("custom", "header")
},
}
});
}
}

我可以使用 mock-express-request创建 Request/Response 对象,但我不知道如何将它插入 proxy

有没有办法注入(inject)一个模拟来拦截发送代理请求的 http 客户端?理想情况下,我可以以某种方式将这个函数插入 Controller:

public mockedHttpServer(req: Request):Response
{
const res = new MockExrpessResponse();

if (req.url == "http://expected.url"){
res.write("success");
res.statuscode = 200;
}
else{
res.statuscode = 404;
}

return res;
}

尝试连接到 proxy.onProxyReq 并调用 proxyReq.abort() 并尝试直接写入 Response,但是不会阻止实时请求发出。

是否有另一种方法可以连接到 http 堆栈并模拟网络 io?

最佳答案

你可以考虑使用类似的东西:

https://github.com/nock/nock

您可以拦截传出的 http 请求并使用模拟服务器为它们提供服务,而不是尝试注入(inject)模拟。

关于typescript - 模拟 Node Js 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56722719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com