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

NodeJS代理API端点无响应问题排查(调用MailerLite API)

问题分析与修复方案

核心问题:未向前端返回响应

你在第三方API响应的end事件里仅执行return body.toString(),但这个返回值无法传递到Express的响应流程中,前端请求会一直处于等待状态直至超时。必须调用Express响应对象的send()/json()方法,将第三方API的结果主动返回给前端。

次要问题:变量名冲突与缺失错误处理

  • 路由回调的参数req被内部的http.request请求变量覆盖,可能引发潜在逻辑问题,建议重命名内部请求变量。
  • 未处理第三方API请求失败的场景(如网络错误、API返回错误状态码),会导致前端请求无响应。

修复后的完整代码

const app = express();
const https = require("https");

app.get('/api/mailers/campaigns', (req, res) => {
    let chunks = [];
    const options = {
        method: "GET",
        hostname: "api.mailerlite.com",
        port: null,
        path: "/api/v2/campaigns",
        headers: {
            "x-mailerlite-apikey": "api_key", // 替换为你的真实API密钥
            "content-type": "application/json"
        }
    };

    // 重命名内部请求变量,避免覆盖Express的req对象
    const mlReq = https.request(options, function (mlRes) {
        mlRes.on("data", function (chunk) {
            chunks.push(chunk);
        });

        mlRes.on("end", function () {
            const body = Buffer.concat(chunks).toString();
            // 将第三方API的响应返回给前端,同步状态码
            res.setHeader('Content-Type', 'application/json');
            res.status(mlRes.statusCode).send(body);
        });
    });

    // 添加错误处理,前端能收到明确的失败提示
    mlReq.on('error', (err) => {
        res.status(500).json({ error: '请求MailerLite API失败', details: err.message });
    });

    mlReq.end();
});

额外说明

  1. 确保将代码中的api_key替换为真实的MailerLite密钥,当前的代理模式能有效避免密钥暴露给前端,符合安全要求。
  2. 如果第三方API返回JSON格式,也可以用res.json(JSON.parse(body))直接返回JSON对象,更贴合Express的响应规范。
  3. 若需要转发前端传来的参数(如分页、筛选条件),可拼接在options.path中,实现完整的代理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:55:34