我目前正在构建一个云功能来从电子商务网站上抓取一些数据。我在 Node.js v8 环境中运行它们,因此我async/await
无需转译即可使用。
我需要一种方法来保存带有来自网站的 html 响应的文件,以便我可以检查它并决定如何最好地抓取它。而我一直无法让它发挥作用。
正如我在许多地方发现的那样,我需要一种方法来保证该fs.writeFile()
功能,以便我能够await
做到。我已经尝试util.promisify
并构建了下面的自定义函数(两者都产生相同的结果,这是我的云函数在我await
获得结果时崩溃):
index.js(云功能的主文件 - 简化版)
const functions = require('firebase-functions');
const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');
// PROMISIFY WRITEFILE TO SAVE URL RESPONSE
const promisifiedWriteFile = function(text) {
return new Promise((resolve, reject) => {
fs.writeFile('./response.html', text, err => {
if (err) {
return reject(err);
}
return resolve();
});
});
};
exports.getUrlProductDetails = functions.https.onCall(
async (data) => {
try …
Run Code Online (Sandbox Code Playgroud) javascript node.js async-await firebase google-cloud-functions
我正在尝试使用 firebase 云功能在创建新用户时添加一些自定义声明。作为自定义声明,我需要向创建的用户添加用户角色
我尝试了一些教程,其中在用户创建后添加了用户角色。https://www.youtube.com/watch?v=4wa3CMK4E2Y。但我想在创建用户时添加自定义声明并返回响应
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.addDefaultUserRole = functions.auth.user().onCreate((user) => {
let uid = user.uid;
//add custom claims
return admin.auth().setCustomUserClaims(uid,{
isAdmin: true,
});
});
Run Code Online (Sandbox Code Playgroud)
即使上面的代码在 firebase 中执行,也没有发生任何事情,响应中也没有收到声明。在用户创建中添加自定义声明不是一个好习惯吗?没有用上面的代码附加自定义声明的原因是什么
javascript node.js firebase firebase-authentication google-cloud-functions
无法在其他项目下的存储桶上创建云函数触发器。
部署功能(可能需要一段时间 - 最多 2 分钟)...失败。
错误:(gcloud.functions.deploy)OperationError:代码=7,消息=没有足够的权限来(重新)配置触发器(存储桶 ing-auto 的权限被拒绝)。请为存储桶的编辑者角色授予所有者权限,然后重试。
对于云功能中使用的服务帐户,拥有对存储桶所在项目的所有者访问权限。
即有两个项目project-a 和project-b。需要在project-a 中创建 cloud 函数。谷歌存储桶在项目-b 中。服务帐户用户serv-user是项目 a 的一部分,拥有项目 b 的所有者访问权限,将用于执行云功能。
gcloud functions deploy hello_gcs --runtime python37 --trigger-resource bucket-from-other-project-xxx --trigger-event goog
le.storage.object.finalize
Run Code Online (Sandbox Code Playgroud)
我能够在同一项目的存储桶上创建云函数存储触发器
google-cloud-storage google-cloud-platform google-cloud-functions
我使用 Cloud Functions 来满足我的大部分后端需求。Cloud Run 为现有的 Cloud Functions 用户提供了哪些额外的好处?两者都是托管的,具有自动缩放功能,处理 HTTP 并在 GCP 中运行。
Cloud Run 适合Google Cloud Platform 的哪个位置?
参考资料:GCP 解释 - 中
firebase google-cloud-platform google-cloud-functions google-cloud-run
我正在为 firebase 设置一个典型的电子邮件功能,以便在添加新记录时提醒我。在我的终端中,我输入以下内容:
firebase functions:config:set gmail.email="MyEmail@gmail.com" gmail.password="MyPassword1!"
Run Code Online (Sandbox Code Playgroud)
这将返回错误:-bash: !": event not found
如果我愿意,我可以只设置电子邮件并且它工作正常,但是设置密码让我遇到了这个问题。所以,这有效:
firebase functions:config:set gmail.email="MyEmail@gmail.com"
Run Code Online (Sandbox Code Playgroud)
这不会:
firebase functions:config:set gmail.email="MyEmail@gmail.com" gmail.password="MyPassword1!"
Run Code Online (Sandbox Code Playgroud)
或者
firebase functions:config:set gmail.password="MyPassword1!"
Run Code Online (Sandbox Code Playgroud)
想法??
我希望这能奏效,事实上我以前有过它的工作。
我想使用在 Typescript 中键入的云函数更新 Firestore 中的地图,因此我编写了此代码,但它不起作用:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp(functions.config().firebase);
exports.sendNote = functions.https.onCall(async(data,context)=>{
const numeroSender: string = data['numeroSender'];
const amisA = admin.firestore().collection('Amis').doc(numeroReceiver);
const connaissanceABBA:number = 3.0;
const version:number = 1;
await amisA.update({
'amis.${numeroSender}' : [connaissanceABBA,version]
});
});
Run Code Online (Sandbox Code Playgroud)
编辑器不会用它的值替换 numeroSender,我也尝试过:
'amis.'+numeroSender
Run Code Online (Sandbox Code Playgroud)
并且编辑器正在询问分号并显示许多其他错误。甚至我也尝试过这种方式:
const mapA: string = ("amis."+numeroSender);
console.log(mapA);
await amisA.update({
mapA : [connaissanceABBA,version]
});
Run Code Online (Sandbox Code Playgroud)
控制台显示正确的字符串,但更新函数不读取 mapA 值,而是使用字符串 'mapA' 执行。
firebase typescript google-cloud-functions google-cloud-firestore
我想部署一个不依赖于使用 requirements.txt 来安装包的云功能。我希望这些包在存储中可用,或者作为功能的一部分进行压缩和上传。这可能吗?
编辑 6/14/2019
基本上我想用我的代码发送像 numpy 和 pandas 这样的包来部署云功能。如果 pypi.org 不可用,我想这样做。我试过按照这篇文档进行操作。我正在尝试做的一个例子如下:
文件夹结构:
-> my_folder
-> main.py
-> libs
-> numpy (the entire package)
-> pandas (the entire package)
-> __init__.py
Run Code Online (Sandbox Code Playgroud)
主文件
import libs.numpy as np
import libs.pandas as pd
def function()
do stuff with numpy and pandas
Run Code Online (Sandbox Code Playgroud)
然后我尝试从 gcloud 命令行和 gcp UI 部署该功能,但都失败了。如果这是可能的,请帮忙。
我是打字稿的新手。我使用来自谷歌(谷歌云函数)的无服务器解决方案,该解决方案在后台运行带有打字稿的 Node.js。当我在日志中收到“运行时错误”时,我在 .js 文件中看到错误,这是有道理的,因为 .ts 代码被编译为 .js,但当我编写 typescript 代码而不是 javascript 代码时,它使调试变得更加困难。一般来说,我希望看到在 .ts 中而不是在 .js 中产生错误的行。这可能吗?
我真的很喜欢这样一个事实,即在用 typescript 开发云函数时,firebase 有一些非常好的类型。我希望能够对数据库中的实体(如用户等)使用自动完成功能。如何正确创建类?
我认为它应该是这样的
type User = {
activeUntil: admin.firestore.Timestamp
createdAt: admin.firestore.Timestamp
sex: 'men' | 'woman'
name: string
}
export default async function onCreate (snap : FirebaseFirestore.DocumentSnapshot) {
const user:User= snap.data()
console.log('user:- ', user)
return
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:我收到以下错误:类型 'DocumentData' 缺少来自类型 'User' 的以下属性:activeUntil、createdAt、sex、name。
typescript google-cloud-functions typescript-typings google-cloud-firestore
每次将文档放入某个存储桶时,我都想启动 DAG 工作流来分析此文档。我需要使用云功能使用云存储触发器和事件类型来触发 DAG 工作流完成并创建
firebase ×6
node.js ×3
typescript ×3
javascript ×2
python ×2
async-await ×1
gmail ×1
nodemailer ×1