Mar*_*son 8 httprequest node.js google-cloud-functions
这可能是一个简单的问题,但我是云功能/节点编程的新手,还没有找到正确的文档.
如何编写将收到HTTP请求但随后将HTTP请求发送到其他端点的Google云功能?例如,我可以将HTTP触发器发送到我的云功能(https://us-central1-plugin-check-xxxx.cloudfunctions.net/HelloWorldTest).在项目的后期,我将弄清楚如何实现延迟.但后来我想回复一个新的HTTP请求到另一个端点(https://maker.ifttt.com/trigger/arrive/with/key/xxxx).我怎么做?
exports.helloWorld = function helloWorld(req, res) {
// Example input: {"message": "Hello!"}
if (req.body.message === undefined) {
// This is an error case, as "message" is required.
res.status(400).send('No message defined!');
} else {
// Everything is okay.
console.log(req.body.message);
res.status(200).send('Success: ' + req.body.message);
// ??? send a HTTP request to IFTTT endpoint here
}
};
Run Code Online (Sandbox Code Playgroud)
Mar*_*son 11
以下是我在Chetan Kanjani的帮助下设法获得的代码.当我向我的Google Cloud功能端点发送短信时,它会向IFTTT(另一个端点)回复短信.
const request = require('request');
exports.helloWorld = function helloWorld(req, res) {
// Example input: {"message": "Hello!"}
if (req.body.message === undefined) {
// This is an error case, as "message" is required.
res.status(400).send('No message defined!');
} else {
// Everything is okay.
console.log(req.body.message);
request.get('https://maker.ifttt.com/trigger/arrival/with/key/xxxx', function (error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); //Prints the response of the request.
});
res.status(200).send("Success");
}
};
Run Code Online (Sandbox Code Playgroud)
我还必须更改package.json文件以包含请求包.它已经有了sample-http包,我添加了依赖项:
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"request": "^2.81.0"
}
}
Run Code Online (Sandbox Code Playgroud)
我仍然不确定console.log函数在哪里打印出信息.这可能对将来的调试很有帮助.
小智 5
使用https://www.npmjs.com/package/request模块。
var request = require('request');
request.get('https://maker.ifttt.com/trigger/arrive/with/key/xxxx', function (error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); //Prints the response of the request.
});
Run Code Online (Sandbox Code Playgroud)
下面的代码有效。不确定 Axios 是否是处理此类简单请求的理想模块,但 Google Cloud Function 文档使用 Axios,因此使用 Axios 似乎也是明智的。其他答案使用该request模块,但它已于 2020 年 2 月被弃用。
注意:GCF 目前不原生支持 ES6。Node 13 附带 ES6 支持。
包.json
{
"name": "YOUR_NAME",
"version": "0.0.1",
"dependencies": {
"axios": "^0.19.2"
}
}
Run Code Online (Sandbox Code Playgroud)
索引.js
/**
* Required Modules
*/
const axios = require("axios");
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.run = async(req, res) => {
// Set API end point.
let apiURL = YOUR_URL;
// Wrap API parameters in convenient object.
let apiData = {
PARAM_1: PARAM_DATA,
PARAM_2: PARAM_DATA
};
// Invoke API.
axios.post(apiURL,
JSON.stringify(apiData)
)
.then((response) => {
res.status(200).send(response.data);
console.log(response);
}, (error) => {
res.status(500).send(response.data);
console.log(error);
});
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13602 次 |
| 最近记录: |