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

Node.js中如何从函数返回第三方API响应并返回给客户端?

解决方案:第三方短信服务响应返回客户端

你的问题核心是异步请求的处理问题,当前代码里sendSms用的是回调式的request库,无法直接返回响应结果,需要调整为支持异步返回的方式,下面是具体修改方案:

1. 修改smsservice.js,将回调改为Promise

把回调风格的request调用包装成Promise,让异步结果可以被外部捕获:

var request = require("request");

module.exports.sendSms = () => {
  return new Promise((resolve, reject) => {
    var options = {
      'method': 'POST',
      'url': 'https://smsplus.xxxxxxx.com/api/v3/send-sms',
      'headers': {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        "api_token": "xxxxx-xxxxx-xxxxx-xxxxx",
        "sid": "xxxxxx",
        "msisdn": "xxxxxx",
        "sms": "Test SMS",
        "csms_id": "xxxxxxx"
      })
    };
    request(options, function (error, response) {
      if (error) {
        reject(error);
        return;
      }
      resolve(response.body);
    });
  });
};

2. 修改app.js,使用async/await处理异步请求

将路由处理函数改为异步函数,等待sendSms的Promise结果后再返回给客户端:

// 导入sendSms函数
const { sendSms } = require('./smsservice');

app.get('/sendansms', async (req, res) => {
  try {
    const response = await sendSms();
    console.log("第三方响应内容: ", response);
    res.send(response);
  } catch (error) {
    console.error("短信发送失败: ", error);
    res.status(500).send({ error: '短信发送失败' });
  }
})

关键说明

  • 用Promise包装异步操作,是为了让异步结果可以被await捕获,避免回调地狱
  • 加入try/catch是为了处理请求第三方API时的错误,避免服务崩溃,同时给客户端返回合理的错误响应
  • 不需要把res传递给sendSms,服务层应专注于调用第三方API,路由层负责处理请求和响应的返回

内容的提问来源于stack exchange,提问作者Manas S. Roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:55:16