我正在尝试为我的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)
]);
});
});
答案 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。