node.js小白,求助一个https请求封装的FC 代码,要求提供https post接口,封装调用另一个https接口,入参有些需要写死有些透传。有相关代码可参考不?
以下是一个使用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、请求路径、请求头、请求体等。
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 接口和业务逻辑进行修改和扩展。例如,可以添加请求超时、重试、错误处理等功能,以提高代码的健壮性和可靠性。
以下是一个基于 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 或回调函数的方式处理异步操作。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。