开发者社区 > 云原生 > Serverless > 正文

node.js小白,求助一个https请求封装的FC 代码,要求提供https post接口,封装调

node.js小白,求助一个https请求封装的FC 代码,要求提供https post接口,封装调用另一个https接口,入参有些需要写死有些透传。有相关代码可参考不?

展开
收起
数据大拿 2023-05-16 15:49:55 167 0
4 条回答
写回答
取消 提交回答
  • 参考 。这个是python的例子,也能实现接口转发。

    回答5.png

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-05-16 19:07:40
    赞同 展开评论 打赏
  • 以下是一个使用Node.js实现的HTTPS POST请求封装的函数示例,适用于阿里云函数计算(FC),你可以根据具体情况进行适当修改:

    const https = require('https');
    
    /**
     * 发送HTTPS POST请求
     * @param {object} options 请求参数
     * @param {string} payload 请求数据
     * @returns {Promise} 返回Promise对象,resolve返回响应数据,reject返回错误信息
     */
    function sendHttpRequest(options, payload) {
      return new Promise((resolve, reject) => {
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => {
            data += chunk;
          });
          res.on('end', () => {
            resolve(data);
          });
        });
    
        req.on('error', (error) => {
          reject(error);
        });
    
        req.write(payload);
        req.end();
      });
    }
    
    /**
     * 封装HTTPS POST请求
     * @param {string} url 请求URL
     * @param {object} headers 请求头
     * @param {string} body 请求数据
     * @returns {Promise} 返回Promise对象,resolve返回响应数据,reject返回错误信息
     */
    async function postHttps(url, headers, body) {
      const options = {
        protocol: 'https:',
        method: 'POST',
        hostname: 'xxxxxx.com', // 请求的主机名,根据实际情况修改
        path: '/api/test', // 请求的路径,根据实际情况修改
        headers: headers,
      };
    
      const data = await sendHttpRequest(options, body);
      return data;
    }
    
    // 示例调用
    exports.handler = async (event, context) => {
      // 请求头
      const headers = {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer xxx', // 鉴权信息,根据实际情况修改
      };
    
      // 请求体
      const body = {
        // 需要写死的入参,根据实际情况修改
        'type': 'test',
        'timestamp': Date.now(),
    
        // 透传的入参
        ...event, // 将event中的内容全部解构添加到请求体中
      };
    
      // 发起HTTPS POST请求
      const response = await postHttps('https://test.com/api', headers, JSON.stringify(body));
    
      return response;
    };
    

    以上代码假设请求体为JSON格式,可根据实际需求进行修改。其中,sendHttpRequest函数用于发送HTTPS请求,postHttps函数封装了HTTPS POST请求,exports.handler部分为示例代码,在其中使用了postHttps函数进行了POST请求的调用。你可以根据具体情况进行修改调整,例如请求URL、请求路径、请求头、请求体等。

    2023-05-16 17:35:33
    赞同 展开评论 打赏
    • 以下是一个 Node.js 的 HTTPS POST 接口封装示例代码,您可以进行参考和修改:
    const https = require('https');
    
    function postHttps(url, data) {
      return new Promise((resolve, reject) => {
        const postData = JSON.stringify(data);
        const options = {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
            'Content-Length': postData.length,
          },
        };
        const req = https.request(url, options, (res) => {
          res.setEncoding('utf8');
          let body = '';
          res.on('data', (chunk) => {
            body += chunk;
          });
          res.on('end', () => {
            try {
              resolve(JSON.parse(body));
            } catch (error) {
              reject(error);
            }
          });
        });
        req.on('error', (error) => {
          reject(error);
        });
        req.write(postData);
        req.end();
      });
    }
    
    // 示例用法
    postHttps('https://example.com/api', { foo: 'bar' })
      .then((response) => {
        console.log('Response:', response);
      })
      .catch((error) => {
        console.error('Error:', error);
      });
    
    

    在这个示例中,我们使用了 Node.js 内置模块 https 实现了一个 HTTPS POST 请求的封装函数 postHttps。该函数接受两个参数:请求 URL 和请求数据,返回一个 Promise 对象。

    在函数内部,我们首先将请求数据转换为 JSON 格式,并设置请求头信息。然后,使用 https.request 方法向指定的 URL 发送 POST 请求,并监听响应事件。在收到响应数据后,我们将其转换为 JSON 格式,并通过 Promise 的 resolve 方法返回给调用者。如果在请求过程中发生异常,则会使用 Promise 的 reject 方法返回错误信息。

    需要注意的是,以上代码仅作为示例用途,实际使用时需要根据具体的 API 接口和业务逻辑进行修改和扩展。例如,可以添加请求超时、重试、错误处理等功能,以提高代码的健壮性和可靠性。

    2023-05-16 16:36:24
    赞同 展开评论 打赏
  • 以下是一个基于 Node.js 的函数计算(FC)代码示例,封装了一个 HTTPS POST 请求的函数,并调用了另一个 HTTPS 接口:

    javascript const https = require('https'); const qs = require('querystring');

    exports.handler = async function(event, context, callback) { const postData = { // 需要写死的参数 'param1': 'value1', 'param2': 'value2', // 透传的参数 'param3': event.param3, 'param4': event.param4 };

    const options = { hostname: 'api.example.com', // HTTPS 接口的主机名 path: '/path/to/api', // HTTPS 接口的路径 method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(qs.stringify(postData)) } };

    const req = https.request(options, (res) => { console.log(statusCode: ${res.statusCode});

    res.on('data', (d) => {
      process.stdout.write(d);
    });
    
    res.on('end', () => {
      callback(null, 'HTTPS POST 请求成功!'); // 返回成功信息
    });
    

    });

    req.on('error', (error) => { console.error(error); // 打印错误信息 callback(error); // 返回错误信息 });

    req.write(qs.stringify(postData)); // 发送 POST 请求 req.end(); }; 上述代码中,我们首先定义了一个 postData 对象,其中包含了需要写死和透传的参数。然后定义了一个 options 对象,配置了 HTTPS 请求的主机名、路径、方法和请求头。接下来,通过 https.request() 函数发起请求,并在回调函数中输出响应数据或错误信息,并使用回调函数返回成功或错误信息。

    需要注意的是,由于代码中使用了 async/await 语法,所以需要确保您的 Node.js 运行环境版本号不低于 8.0。如果您使用的是低版本的 Node.js,可以尝试使用 Promise 或回调函数的方式处理异步操作。

    2023-05-16 16:02:30
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 热门讨论

    热门文章

    相关电子书

    更多
    探究 Node.js 的服务端之路 立即下载
    个推微服务实践 基于OpenResty 和Node.js 立即下载
    沪江基于Node.js大规模应用实践 立即下载