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

Express服务器无法连接API端点 路由转发POST请求失败求助

问题修复方案

核心问题

  • 路由挂载逻辑错误:app.use()的第一个参数是本地Express服务的路由前缀,你错误填写了远程API的完整地址,导致本地没有对应路由入口,请求无法进入转发逻辑
  • 变量作用域错误:主文件中定义的options变量没有导出,路由文件中无法访问,实际运行会直接抛出未定义错误
  • 转发请求参数缺失:没有将前端提交的请求方法、请求体、请求头传递给目标API,且目标API的请求地址没有拼接后续路由,请求路径和方法完全错误
  • 目标请求路径错误:你要调用的目标接口是https://rms.pythonanywhere.com/api/user/create,代码中只请求了前缀/api,没有拼接后续的/user/create路径

修复代码

主文件修改

只需要修改路由挂载的代码,无用的options变量可直接删除:

// 把原来的app.use(options.url, apiRouter);改成下面的代码即可
app.use('/api', apiRouter);

apiRouter文件完整代码

const express = require("express");
const apiRouter = express.Router();
const fetch = require("node-fetch");
// 统一配置目标API前缀
const TARGET_API_PREFIX = "https://rms.pythonanywhere.com/api";

apiRouter.post("/user/create", async function (req, res) {
  try {
    const fetch_res = await fetch(`${TARGET_API_PREFIX}/user/create`, {
      // 传递请求方法
      method: "POST",
      // 传递请求头
      headers: {
        "Content-Type": "application/json"
      },
      // 传递前端提交的请求体
      body: JSON.stringify(req.body)
    });
    const json = await fetch_res.json();
    res.json(json);
  } catch (err) {
    // 捕获错误避免服务崩溃
    res.status(500).json({ code: 500, msg: "转发请求失败", error: err.message });
  }
});

// 后续其他接口也可以按照这个逻辑扩展,比如登录接口
apiRouter.post("/user/login", async function (req, res) {
  try {
    const fetch_res = await fetch(`${TARGET_API_PREFIX}/user/login`, {
      method: "POST",
      headers: {
        "Content-Type": "application/json"
      },
      body: JSON.stringify(req.body)
    });
    const json = await fetch_res.json();
    res.json(json);
  } catch (err) {
    res.status(500).json({ code: 500, msg: "转发请求失败", error: err.message });
  }
});

module.exports = apiRouter;

测试方式

前端注册表单的提交地址改成你本地Express服务的/api/user/create即可,请求会自动转发到目标API并返回结果。

内容的提问来源于stack exchange,提问作者O.smith Effizzy's Tech

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:18:04