由于JSON.stringify()错误导致无法部署Firebase Cloud Function

时间:2019-01-21 16:15:50

标签: javascript firebase-realtime-database firebase-cloud-messaging google-cloud-functions

我正在尝试为我的react native应用程序部署云功能,以便在数据库中出现新节点时向用户发送通知。为此,我使用的是Expo的Push API,如下所示:https://docs.expo.io/versions/v32.0.0/guides/push-notifications,并遵循此处提供的教程:https://www.youtube.com/watch?v=R2D6J10fhA4

我已经能够获取设备令牌并将它们保存到我的数据库中。但是,由于出现错误提示,我无法将该函数部署到我的数据库中:

31:27解析错误:意外的令牌,预期的,

它在'body:JSON.stringify(messages)'行上引发了致命错误,好像它在'stringify'之后期望逗号一样。我非常不确定如何从这里开始,并且似乎找不到解决此特定问题的任何帖子。

任何帮助和/或建议,不胜感激!谢谢。

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

let fetch = require('node-fetch');

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

exports.sendPushNotification = functions.database.ref('Omicron-Pi')
.onCreate(event => {
  const root = event.data.ref.root;
  let messages = [];

  root.child('Omicron-Pi/profiles').once('value').then((snapshot) => {
    snapshot.forEach((childSnapshot) => {
      let pushToken = childSnapshot.val().pushToken;
        if (pushToken) {
          messages.push({
            to: pushToken,
            body: 'New Node added'
          });
        }
    });
    return Promise.all(messages);
  }).then(messages => {
    fetch('https://exp.host/--/api/v2/push/send', [
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(messages)
    ]);
  });
});

1 个答案:

答案 0 :(得分:0)

fetch()的第二个参数是具有初始化属性的对象,但是您正在传递数组。

要解决此问题,请使用{}而不是[]

fetch('https://exp.host/--/api/v2/push/send', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(messages)
});

要了解更多信息,请阅读documentation on how to use fetch on MDN