0

我正在尝试为我的本机应用程序部署一个云功能,当数据库中出现新节点时,它会向用户发送通知。为此,我正在使用 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)
    ]);
  });
});
4

1 回答 1

0

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

要修复它,请使用{}而不是[]

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

要了解更多信息,请阅读有关如何在 MDN 上使用 fetch 的文档

于 2019-01-21T16:27:33.637 回答