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

如何阻止其他域名访问Node/React应用的内部API接口?

Node/React应用服务端API代理实现方案与优化

我猜你是在做Node/React全栈应用时,想用服务端代理来请求外部API,规避前端跨域问题对吧?先看看你给出的server.js里的代码片段:

server.get('/api/data', (req, res) => { 
  Promise.resolve(getAPIData()).then(data => { 
    res.writeHead(200, {'Content-Type': 'application/json'}) 
    return res.end(serialize(data)) 
  }).catch((error) => { 
    console.log(error) 
    res.writeHead(200, {'Content-Type': 'application/json'}) 
    return res.end(serialize({}))
  })
})

这里有几个可以优化的点,帮你梳理下:

  • 错误状态码修正:现在捕获错误后仍返回200状态码,前端很难区分请求成功还是失败,建议改成500(服务端内部错误),让前端能正确识别异常并处理
  • 用async/await简化代码:Promise链式调用可以换成更直观的async/await写法,代码可读性会高很多
  • 完善错误返回内容:可以在错误响应里带上友好的提示信息(注意别泄露服务端敏感细节),让前端清楚问题所在

优化后的代码示例:

server.get('/api/data', async (req, res) => { 
  try {
    const data = await getAPIData();
    res.writeHead(200, {'Content-Type': 'application/json'});
    return res.end(serialize(data));
  } catch (error) {
    console.error('获取外部API数据失败:', error);
    // 返回500状态码和错误提示
    res.writeHead(500, {'Content-Type': 'application/json'});
    return res.end(serialize({ success: false, message: '数据加载失败,请稍后重试' }));
  }
})

另外还有两个小提醒:

  • 确保getAPIData函数确实返回Promise,如果原本是同步函数,记得先包装成Promise再使用await
  • serialize函数要处理好循环引用、特殊数据类型(比如Date对象)等情况,避免出现JSON序列化失败的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:54:17