小编skw*_*wny的帖子

Cloud Functions for Firebase 中的本地依赖项

当我尝试部署我的函数时,firebase 抱怨这个:

const admin = require('firebase-admin');
const functions = require('firebase-functions');
const C = require('../both/constants.js');

exports.myFunc = functions.database.ref('aRef').onCreate((event) => {
  // blah blah
}

Error: Error parsing triggers: Cannot find module '../both/constants.js'
Run Code Online (Sandbox Code Playgroud)

但不是这个:

const admin = require('firebase-admin');
const functions = require('firebase-functions');

// This is the invite that goes to organizations.
exports.myFunc = functions.database.ref('aRef').onCreate((event) => {
  const C = require('../both/constants.js');
}
Run Code Online (Sandbox Code Playgroud)

这是为什么?

更新:看起来会发生这种情况是因为该函数直到运行时才会查找依赖项。这当然是一个问题,因为仍然需要依赖项。我应该提到我的项目是这样的:

both
  constants.js
functions
  index.js
  myFunc.js
Run Code Online (Sandbox Code Playgroud)

更新 2既然我正在将堆栈完全转移到 Firebase 函数,我又重新开始处理这个问题。模块需要发布才能在函数内工作。对于发生在此psot上的任何人,仅供参考。

node.js firebase google-cloud-functions

4
推荐指数
1
解决办法
1883
查看次数

如何使用 moment.js 将 ISO 日期/时间转换为本地日期/时间?接收奇数输出

我正在使用 moment.js 将 ISO 日期/时间/区域字符串转换为本地字符串。根据文档和其他类似的问题,例如this,本来应该非常简单的事情结果却并非如此,并且给了我一些奇怪的输出。这是我所拥有的:

\n\n
console.log(\'date/time before is: \', date);\n// date/time before is:  2016-12-23T23:10:00.000Z\n\nvar datetime = moment(date).format("dddd, MMMM Do YYYY, h:mm:ss a");\n\nconsole.log(\'date/time after is: \', datetime);\n// date/time after is:  p\xc3\xa1tek, prosinec 23. 2016, 3:10:00 pm\n
Run Code Online (Sandbox Code Playgroud)\n\n

我使用的格式字符串直接来自文档。目的是在它工作后能够按照我需要的方式对其进行格式化。

\n

javascript date momentjs

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

Firestore onSnapshot-如何判断哪些字段已更改?

我正在对数据建模,并且对onSnapshot(Web)侦听器有疑问。正如在SO和文档中的几篇文章中所指出的,在初始调用之后,侦听器仅获取更改的数据。我有兴趣知道更改后的数据是什么。如果侦听文档,那么获取的仅仅是字段还是整个文档?

在一个文档上有一个侦听器,并且该文档上的字段的值发生更改(或者添加或删除了一个字段)的情况下,仅获取该字段吗?换句话说,这类似于将child_changed/added/removed侦听器放置在RTDB中的节点上吗?

目的是确定我是否应该在RTDB或Firestore中保持经常更改的文档,客户端必须收听哪些文档。我宁愿不要仅由于字段更改而将整个文档重新发送给客户。

例。我们有以下文件:

rando_id:
  field1
  field2
  field3
Run Code Online (Sandbox Code Playgroud)

如果field2的值发生变化,将仅field2是从Firestore DB传输到客户端的数据吗?同样适用于添加field4或删除field1。是否会将这些字段发送给客户端?

firebase google-cloud-firestore

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

有没有办法确定Firebase用户的UID是否有效?

我正在建立一个服务器路由,我希望限制其仅由经过身份验证的用户使用。我计划将带有POST的user.uid发送到此路由,并且我想验证UID是Firebase中存在的UID。我知道我可以在Firebase中手动添加UID并对照此数据进行检查,但是可以查看Firebase身份验证正在跟踪哪些UID?我认为这种方法比对照我自己的列表要好。

这样做的目的是确保不会使用伪造的UID访问这些路由(例如,出于恶意目的)。

firebase firebase-authentication

2
推荐指数
2
解决办法
2205
查看次数

Firebase HTTP 函数 CORS 问题

从客户端调用它时,我的 Firebase http 函数无法正常工作。以下是客户端的错误:

OPTIONS https://us-central1-my-app.cloudfunctions.net/my-func 500 ()

Failed to load https://us-central1-my-app.cloudfunctions.net/my-func: 
Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:3000' is therefore not allowed access. 
The response had HTTP status code 500.
Run Code Online (Sandbox Code Playgroud)

这是我的函数的样子:

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

exports.func = functions.https.onRequest((req, res) => {
  return cors((req, res, () => {
    res.send("hello");
  }));
});
Run Code Online (Sandbox Code Playgroud)

Firebase 函数日志提供以下信息:

TypeError: Cannot read property 'origin' …
Run Code Online (Sandbox Code Playgroud)

javascript firebase google-cloud-functions

2
推荐指数
1
解决办法
2217
查看次数

Firebase函数onCreate()onDelete()路径特异性

我对Firebase功能事件缺乏了解.为了使我的功能按预期工作,我在参考路径中添加了更多特异性,然后我认为是必需的.

例如,我希望每次在此路径中添加或删除子项时递增或递减计数:

/invites

我用这些作为我的函数来完成这个:

functions.database.ref('/invites').onCreate(event => {
  return admin.database().ref('/counter').transaction((current) => {
    return (current || 0) + 1;
  })
});

functions.database.ref('/invites').onDelete(event => {
  return admin.database().ref('/counter').transaction((current) => {
    if (current >=1) return (current - 1);
    else return;
  })
});
Run Code Online (Sandbox Code Playgroud)

就是我的基础:

路径规范匹配所有触摸路径的写入,包括发生在其下方任何位置的写入.如果将函数的路径设置为/ foo/bar,则它会匹配以下两个位置的事件:

/富/酒吧

/富/酒吧/巴兹/真的/深/路径

在我的情况下,/invites将相当于/bar该示例.

但是,上述功能仅在添加的第一个孩子/invites以及被删除的最后一个孩子上触发.在这两个条件之外,其他任何东西都不会触发计数器功能.我能够完成这项工作的唯一方法是使用它作为我的路径:

invites/{idOfInvite}

虽然我知道这会起作用,但我不知道这正是我需要的.后来我可能决定在某个路径下添加新数据{idOfInvite},这会导致我的计数器功能被激活(我想?).

这个SO答案表明我的函数的行为是预期的,但根据我对文档的理解,它不是我所期望的.也许我正在错误地解释文档?

正如您所知,我对这些添加/删除事件触发方式的理解有些不同.

javascript firebase firebase-realtime-database google-cloud-functions

0
推荐指数
1
解决办法
1171
查看次数