标签: google-cloud-functions

适用于所有文档的通用 Firestore 触发器

如何在 Firestore 中的任何集合中的任何文档更改时触发函数?我想管理createdAtupdatedAt时间戳。我有很多集合,不想为每个集合单独注册触发器。在这一点上我还不如直接创建包装函数addsetupdate

如何注册在修改任何文档时触发的回调?

编辑:

这个时候(2019-08-22),我决定只创建一个包装函数来实现这个功能。接受的答案不保持无模式。基于这篇文章,我创建了这个upset函数来管理时间戳并避免“文档不存在”错误:

const { firestore: { FieldValue } } = require('firebase-admin')

module.exports = async function upset (doc, data = {}) {
  const time = FieldValue.serverTimestamp()

  const update = { updatedAt: time }
  const updated = { ...data, ...update }

  try {
    const snapshot = await doc.get()

    if (snapshot.exists) {
      return doc.update(updated)
    } else {
      const create = { createdAt: time }
      const …
Run Code Online (Sandbox Code Playgroud)

triggers firebase google-cloud-functions google-cloud-firestore

3
推荐指数
1
解决办法
1374
查看次数

如何在字段值更新时触发 Firestore 云功能?

我想使用 Firestore 和云功能将用户的状态字段更新为值 (true) 时向用户发送电子邮件。

我的情况:我有一个用户(集合),它有更多的 userId(文档)文档,每个文档都包含字段和值。字段之一是 status: true | 假(布尔)。

如果该用户的状态使用云功能和 sendgrid api 更改为 true,我想向该用户发送电子邮件。

users
   - dOpjjsjssdsk2121j131
        - id : dOpjjsjssdsk2121j131
        - status : false
   - pspjjsjssdsdsk2121j131
        - id : pspjjsjssdsdsk2121j131
        - status : false
   - yspjjsjssdsdsk2121j131
        - id : yspjjsjssdsdsk2121j131
        - status : false


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const SENDGRID_API_KEY = functions.config().sendgrid.key;
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(SENDGRID_API_KEY);
exports.sendEmail = functions.firestore.document('users/{userId}')
  .onUpdate((change, context) => {  
   const after = change.after.val();

    if(after.status === 'VERIFIED'){
      console.log('profile …
Run Code Online (Sandbox Code Playgroud)

android google-cloud-functions google-cloud-firestore

3
推荐指数
1
解决办法
6425
查看次数

如何使用 Firebase Cloud Functions .npmrc 设置私有 NPM 模块?

我创建了一个私有类型 npm 模块,用于我的 firebase 函数和应用程序项目。当我去部署 firebase 函数时,对于每个基本上说的函数,我都会遇到一个大错误ERR! remote: Invalid username or password.

对于我所阅读的内容,看起来我需要创建一个 .npmrc 文件并将其放在 /functions 目录中。(https://cloud.google.com/functions/docs/writing/specifying-dependencies-nodejs#using_private_modules

但是,我无法在任何地方找到有关如何执行此操作的正确说明。根据我的发现,我做了以下工作:

  • 运行 npm 登录
  • 运行 npm token create --read-only

这就给了我一个令牌,看起来像这样:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

然后我在我的函数目录中创建一个名为 .npmrc 的文件,并将其放入//registry.npmjs.org/:_authToken=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX其中。

此外,我看到错误消息试图使用 ssh 来安装我的私有 repo 包,我没有设置 ssh 而是使用 https,因此我将我的包文件更改为git+https://github.com/accounts-name/repo#commit-num使用 HTTPS。

但是,我仍然收到相同的错误消息。我错过了什么?以上是我从大量谷歌搜索中串起来的。

node.js npm firebase google-cloud-functions

3
推荐指数
1
解决办法
1010
查看次数

使用 Cloud Function 从 Google Cloud Storage Bucket 读取最新文件

我面临的问题是 Cloud Storage 按字典顺序(字母顺序)对新添加的文件进行排序,而我正在使用 Cloud Functions 中的 Python 客户端库读取 Cloud Storage 存储桶中索引 0 处的文件(必须使用云函数作为我项目的一部分)并将数据放在 BigQuery 中,这对我来说很好用,但新添加的文件并不总是出现在索引 0 处。

流文件每天在不同时间进入我的存储桶。文件名相同(data-2019-10-18T14_20_00.000Z-2019-10-18T14_25_00.txt)但文件名中的日期和时间字段在每个新添加的文件中都不同。

每次触发云功能时,如何调整此python代码以读取Cloud Storage存储桶中最新添加的文件?

files = bucket.list_blobs()
fileList = [file.name for file in files if '.' in file.name]
blob = bucket.blob(fileList[0])   #reading file placed at index 0 in bucket
Run Code Online (Sandbox Code Playgroud)

python client-library google-cloud-storage google-cloud-platform google-cloud-functions

3
推荐指数
1
解决办法
2683
查看次数

如何在 Firebase 函数中获取下载 URL

使用 Firebase Storage 存储图像时,图像的 URL 如下所示: https ]?alt=media&token=[令牌]

我想得到这个网址。

根据thisthisthisthis,我需要使用该.getDownloadURL()方法,该方法位于“存储引用”..但可用对象的文档与实际对象不符。

当我尝试访问.getDownloadURL()下面代码中文档建议的对象上的方法时,我收到了各种未找到属性的错误。

        const admin = require('firebase-admin');
        admin.initializeApp();

        admin
        .storage()
        .bucket()
        .upload(imageToBeUploaded.filepath, {
            destination: storageFolder,
            resumable: false,
            metadata: {
                metadata: {
                contentType: imageToBeUploaded.mimetype
                }
        }
        })
        .then((taskSnapshot) => {
            // HOW DO I GET THE DOWNLOADABLE URL 
        })
Run Code Online (Sandbox Code Playgroud)

我试过以下:

taskSnapshot[1].getDownloadURL(),

admin.storage().ref(storageFolder+'/'+imageFileName).getDownloadURL(),

admin.storageRef(storageFolder+'/'+imageFileName).getDownloadURL(),

admin.storage().ref().child(storageFolder+'/'+imageFileName).getDownloadURL(),

.. 和一堆其他人。

反复试验没有找到具有该方法的“storageRef”,

如何获取我的图片的可下载网址?

firebase google-cloud-functions firebase-storage firebase-admin

3
推荐指数
1
解决办法
2969
查看次数

Firebase 云功能,具有对外部 api 的基本身份验证的获取请求

我似乎在从 firebase 云函数中的 fetch 调用获取预期响应时遇到问题。我确定这是由于我对响应、承诺等的工作方式缺乏了解。

我正在尝试将 atlassian 人群的休息 api 用于 SSO。如果我使用邮递员,我可以从请求中获得所需的结果。所以我知道它的一部分正在起作用。

导致我使用云功能的原因是使用 fetch 发出相同的请求会导致来自本地主机的 CORS 问题。我想如果我可以将浏览器排除在外,那么 CORS 问题就会消失。他们有,但我没有得到想要的回应。

我的云函数如下所示:

const functions = require('firebase-functions');
const fetch = require('node-fetch');
const btoa = require('btoa');
const cors = require('cors')({origin:true});

const app_name = "app_name";
const app_pass = "app_password";

exports.crowdAuthentication = functions.https.onRequest((request, response)=>
{
    cors(request, response, () =>{

        let _uri = "https://my.server.uri/crowd/rest/usermanagement/1/session";
        let _headers = {
            'Content-Type':'application/json',
            'Authorization':`Basic ${btoa(`${app_name}:${app_pass}`)}`
        }


        let _body = {
            username: request.body.username,
            password: request.body.password
        }

        const result = fetch(_uri, {
            method: 'POST', …
Run Code Online (Sandbox Code Playgroud)

javascript cors atlassian-crowd firebase google-cloud-functions

3
推荐指数
1
解决办法
3787
查看次数

GCP 数据流与云函数

我有一个现有系统,其中数据发布到 Pub/Sub 主题,由云功能订阅者读取并推送到 Big Query 以存储它(订阅者 CF 中未完成其他转换)。

使用 pub/sub-BQ 模板将我的订阅者 CF 更改为 Dataflow 流作业是个好主意吗?使用它们的优点/缺点是什么?

google-cloud-platform google-cloud-pubsub google-cloud-dataflow google-cloud-functions

3
推荐指数
1
解决办法
1896
查看次数

云功能:调整大小的图像未加载

我正在按照教程在上传时通过 Cloud Functions 调整图像大小,但遇到了两个我无法弄清楚的主要问题:

1) 如果上传了 PNG,它会生成大小正确的缩略图,但它们的预览不会在 Firestorage 中加载(加载微调器无限期显示)。它只在我点击“生成新的访问令牌”后显示图像(最初生成的缩略图都没有访问令牌)。

2) 如果上传了 JPEG 或任何其他格式,则 MIME 类型显示为“application/octet-stream”。我不确定如何正确提取扩展名以放入新生成的缩略图的文件名中?

export const generateThumbs = functions.storage
.object()
.onFinalize(async object => {
  const bucket = gcs.bucket(object.bucket);
  const filePath = object.name;
  const fileName = filePath.split('/').pop();
  const bucketDir = dirname(filePath);

  const workingDir = join(tmpdir(), 'thumbs');
  const tmpFilePath = join(workingDir, 'source.png');

  if (fileName.includes('thumb@') || !object.contentType.includes('image')) {
    console.log('exiting function');
    return false;
  }

  // 1. Ensure thumbnail dir exists
  await fs.ensureDir(workingDir);

 // 2. Download Source File
 await bucket.file(filePath).download({
   destination: tmpFilePath …
Run Code Online (Sandbox Code Playgroud)

node.js google-cloud-functions firebase-storage

3
推荐指数
1
解决办法
1116
查看次数

无需等待响应即可调用云函数

在这里尝试使用云功能进行一些小技巧,但似乎无法弄清楚问题是什么。

我目前正在使用 now.sh 来托管无服务器函数,并希望从另一个函数调用 1 个函数。假设我声明了 2 个函数fetchData& setDatasetData调用该fetchData函数时,它会处理一些数据,然后调用该函数。

export const setData = async (req: Request, res: Response) => {
  await axios.post(
    fetchDataEndpointUrl,
    {
      params: {
        key,
      },
    },
  );

  return res.json({
    payload: true,
  });

}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但完成整个操作所需的时间将是 setData 函数调用 + 完成 fetchData 函数调用所需的时间。我想要做的是调用 ,fetchData而不必等待它完成基本上删除awaitaxios 调用中的 。我试过删除,await但当通话结束时setData通话突然结束。有没有办法解耦这个动作而不必等待setData函数完成?

javascript node.js typescript google-cloud-functions vercel

3
推荐指数
1
解决办法
1596
查看次数

Firebase 云函数可以使用内存缓存吗?

我正在为一个项目使用Firebase 云函数,其中一些函数从 firebase 数据库中获取数据。

我想通过利用 LRU 缓存来加快其中一些查询的速度,但目前尚不清楚 Firebase 云功能是否可以实现这一点。

有谁知道 Firebase 云功能是否可以访问任何类型的缓存/半持久内存访问?其他人可以在这个问题上提供的任何帮助都会非常有帮助!

firebase google-cloud-platform google-cloud-functions

3
推荐指数
1
解决办法
1058
查看次数