jaz*_*gil 5 node.js firebase google-cloud-endpoints google-cloud-functions
我正在尝试在firebase数据库中写入某个值时向我的云端点项目发出请求.我找不到任何如何在Node.js中对端点执行请求的示例.这是我到目前为止所提出的:
"use strict";
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const gapi = require('googleapis');
admin.initializeApp(functions.config().firebase);
exports.doCalc = functions.database.ref('/users/{uid}/calc').onWrite(event => {
return gapi.client.init({
'apiKey': 'AIzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'clientId': '1234567890-xxx.apps.googleusercontent.com',
'scope': 'donno what to put here'
}).then(function() {
return gapi.client.request({
'path': 'https://myproj.appspot.com/_ah/api/myApi/v1',
'params': {'query': 'startCalc', uid: event.params.uid }
})
}).then(function(response) {
console.log(response.result);
}, function(reason) {
console.log('Error: ' + reason.result.error.message);
});
});
Run Code Online (Sandbox Code Playgroud)
触发后,功能的日志喷口:TypeError: Cannot read property 'init' of undefined.即甚至不认识gapi.client.
首先,用于此请求的正确包装是什么?googleapis?请求承诺?
第二,我是否为端点调用设置了正确的路径和参数?假设端点功能是startCalc(int uid).
更新
Cloud Functions for Firebase似乎阻止了对其App Engine服务的请求 - 至少在Spark计划中(即使它们都归谷歌所有 - 所以你假设" 在同一网络上 ").下面的请求,工作运行Node.js的本地机器上,但失败的功能服务器上,有getaddrinfo EAI_AGAIN错误,如所描述这里.显然,当您向运行在Google App Engine上的服务器发出请求时,不会将其视为访问Google API.
无法解释为什么Firebase这里的倡导者会像火一样避开这个问题.
原始答案
想出来 - 切换到'request-promise'库:
"use strict";
const functions = require('firebase-functions');
const request = require('request-promise');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.doCalc = functions.database.ref('/users/{uid}/calc').onWrite(event => {
return request({
url: `https://myproj.appspot.com/_ah/api/myApi/v1/startCalc/${event.params.uid}`,
method: 'POST'
}).then(function(resp) {
console.log(resp);
}).catch(function(error) {
console.log(error.message);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1500 次 |
| 最近记录: |