【问题标题】:firebase functions - change status of recordfirebase 功能 - 更改记录状态
【发布时间】:2018-07-15 09:03:27
【问题描述】:

我使用了 firebase 云功能和 twilio sms 功能..

这段代码运行良好,但我不明白如何更新实时数据库中的相同记录

exports.textStatus = functions.database
       .ref('/sms_messages/{UID}').onCreate((change, event) => {

    const UID = event.params.UID;
    return admin.database().ref(`/sms_messages/${UID}`).once('value').then(snapshot => snapshot.val()).then(msg => {

                    const status      = msg.status
                    const phoneNumber = msg.number

                    // validate phone number
                    if ( !validE164(phoneNumber) ) {
                        throw new Error('number must be E164 format!')
                    }

                    const textMessage = {
                        body: `Velkommen til Club Nautic Booking. Du kan logge ind med ${status} og adgangskoden`,
                        to: phoneNumber,  // Text to this number
                        from: twilioNumber // From a valid Twilio number
                    }

                    return client.messages.create(textMessage)
                })
                .then(message => {
                    console.log(message.sid, 'success');;
                 })

                .catch(err => {
                    console.log(err);
                })
});

所以如果发送了短信,我想更新数据库状态中的记录 = 已发送 (msg.status)

console.log(message.sid, 'success');

但不知道如何在此处获取参考并更新相同的子节点..所以状态将更改为已发送或未发送

【问题讨论】:

    标签: node.js firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:
    // onCreate includes (snapshot, context)
    // https://firebase.google.com/docs/functions/database-events#handle_event_data
    exports.textStatus = functions.database.ref('/sms_messages/{MSG_ID}')
      .onCreate((snapshot, context) => {
    
        const MSG_ID = context.params.MSG_ID;
        // const msg = snapshot.val(); // Using Promise.resolve to retain catch()
    
        return Promise.resolve(snapshot.val())
          .then(msg => {
    
            const status = msg.status;
            const phoneNumber = msg.number;
    
            // validate phone number
            if (!validE164(phoneNumber)) {
              throw new Error('number must be E164 format!'); // This is reason for resolve
            }
    
            const textMessage = {
              body: `Velkommen til Club Nautic Booking. Du kan logge ind med ${status} og adgangskoden`,
              to: phoneNumber,  // Text to this number
              from: twilioNumber // From a valid Twilio number
            }
    
            return client.messages.create(textMessage);
          })
          .then(message => {
            console.log(message.sid, 'success');
    
            // https://firebase.google.com/docs/reference/functions/functions.database.DataSnapshot#ref
            return snapshot.ref.child('sent').set(true);
          })
          .catch(err => {
            console.log(MSG_ID, err);
    
            // sent sent to false, include error message for reference
            let error_promises = [
              snapshot.ref.child('sent').set(false),
              snapshot.ref.child('err_msg').set(err)
            ];
            return Promise.all(error_promises);
    
            // alternatively, just set to false
            // return snapshot.ref.child('sent').set(false);
          })
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      相关资源
      最近更新 更多