Javascript firebase云使用“键”参数写入数据

Javascript firebase云使用“键”参数写入数据,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我正在学习Firebase的云功能。我想要的是在URL参数中传递键和值,如: https://xxx.cloudfunctions.net/addMessageSet?text=goodboy&key=testKey 然后在实时数据库中设置一个testKey:goodboy 我知道如果我理解正确,use push将生成一个唯一的密钥,但我希望每次都使用我自己的密钥。我不确定这套装置是否有效 我的问题是push{originalKey:original}无法按预期工作。它写道: orig

我正在学习Firebase的云功能。我想要的是在URL参数中传递键和值,如:

https://xxx.cloudfunctions.net/addMessageSet?text=goodboy&key=testKey
然后在实时数据库中设置一个testKey:goodboy

我知道如果我理解正确,use push将生成一个唯一的密钥,但我希望每次都使用我自己的密钥。我不确定这套装置是否有效

我的问题是push{originalKey:original}无法按预期工作。它写道:

originalKey: goodboy
其中originalKey只是键,而不是URL中的参数。这是可能的还是其他解决方案

代码如下所示:

exports.addMessageSet = functions.https.onRequest((req, res) => {
    // Grab the text parameter.
    const original = req.query.text;
    const originalKey = req.query.key;
    admin.database().ref('/messages/').push({originalKey:original}).then(snapshot => {
        console.log('goodboy', original, originalKey);
        res.redirect(303, snapshot.ref);
    });
});

使用push确实会生成一个唯一的密钥。您需要使用set或update


请注意,使用set将覆盖指定位置的数据,包括所有子节点。

如果要使用正在生成的密钥而不使用firebase生成另一个密钥,则需要在路径中使用set和密钥

admin.database().ref('/messages/' + originalKey).set(original).then(snapshot => { });
// if originalKey is not a string use String(originalKey)
你说过originalKey不是一个url,但是firebase中的所有东西都是基于url的,就像你现在做的一样

myDB
|_ messages
   |_ originalKey: original
而不是

myDB > messages > originalKey > original
如果在messages节点之后需要另一个键,我建议使用dateunix编号,momentJS可以很好地处理这个问题

希望能有帮助