You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用http-proxy-middleware导致服务器崩溃的问题排查

问题分析与解决

核心问题1:Async回调导致返回Promise引发类型错误

你给responseInterceptor的回调加了async修饰,但http-proxy-middleware的responseInterceptor期望返回Buffer/ArrayBuffer/undefined,而async函数默认返回Promise对象。即便你手动调用了res.json(),当selfHandleResponse: true时,代理内部仍会尝试把你返回的Promise当作响应数据处理,最终抛出ERR_INVALID_ARG_TYPE错误。

核心问题2:PathRewrite语法错误

你的pathRewrite存在模板字符串语法错误:

return `/arg1/arg2}`;

既没正确插入变量arg1和arg2,还多了一个多余的闭合花括号,正确写法应该是:

return `/${arg1}/${arg2}`;

修正后的代码

app.use('/api/someAPI', createProxyMiddleware({
    target: 'https://api.example.com',
    changeOrigin: true,
    pathRewrite: (path, req) => {
        const { arg1, arg2 } = req.query;
        // 修正路径拼接,正确插入变量
        return `/${arg1}/${arg2}`;
    },
    selfHandleResponse: true,
    on: {
        proxyRes: responseInterceptor((responseBuffer, proxyRes, req, res) => {
            try {
                if (!responseBuffer || responseBuffer.length === 0) {
                    throw new Error('Invalid or empty response from target server');
                }
                const response = responseBuffer.toString('utf8');

                res.json({ id: response });
                // 手动结束响应,避免代理后续处理
                res.end();
            } catch (error) {
                res.status(500).json({ error: 'Failed to process response from target server' });
                res.end();
            }
            // 返回undefined,明确告知代理无需继续处理响应
            return undefined;
        }),
    },
    headers: {
        Accept: "application/json",
        'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5.2 Safari/605.1.15"
    }
}));

额外说明

如果你的处理逻辑确实需要异步操作(比如调用其他API),可以保留async,但要确保最终返回undefined,并且手动调用res.end()结束响应:

proxyRes: responseInterceptor(async (responseBuffer, proxyRes, req, res) => {
    try {
        // 异步操作示例
        const processedData = await someAsyncFunction(responseBuffer.toString('utf8'));
        res.json({ id: processedData });
        res.end();
    } catch (error) {
        res.status(500).json({ error: error.message });
        res.end();
    }
    return undefined;
})

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:52:41