Firebase云功能HTTP请求崩溃

时间:2020-06-22 22:56:33

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

我正在尝试通过Firebase云功能发送博览会推送通知,以便将通知从Web应用程序发送到已下载移动应用程序的设备。

当我从Postman发送请求时,它工作正常……我得到了正确的答复,并且通知显示在我的手机上。但是,当我尝试从Web应用程序发出请求时,我在功能日志中得到了此请求:

函数执行耗时22毫秒,状态为:“崩溃”

任何想法为什么会这样?到目前为止,找不到任何可以解释的信息。

这是我的职能:

<div id="visu">
            <div id="element1"class="flex-item"> 
                <textarea class= "name" id="name1" >Apud has gentes, quarum exordiens initium ab Assyriis </textarea>   
             </div> 
             <div id="element2" class="flex-item"> 
                <textarea class= "name" id="name2">Ultima Syriarum est Palaestina   </textarea>   
             </div> 
             <div id="element3" class="flex-item"> 
                <textarea class="name" id="name3">Saepe posset commodi contentionem honoris quam incidissent optimis adipisci commod.</textarea>   
             </div> 

        </div>

我对邮递员的发帖请求

exports.reportNotification = functions.https.onRequest((request, response) => {
    const tokens = request.body.expoPushToken;
    let messages = [];
    tokens.forEach((token) =>
      messages.push({
        to: token,
        title: "title",
        body: "message",
        sound: "default",
        _displayInForeground: "true",
      })
    );

    fetch("https://exp.host/--/api/v2/push/send", {
      method: "POST",
      headers: {
        Accept: "application/json",
        "Accept-encoding": "gzip, deflate",
        "Content-Type": "application/json",
      },
      body: JSON.stringify(messages),
    })
      .then((res) => response.status(200).json({ res: res }))
      .catch((err) => response.status(400).json({ error: err }));
});

然后我在Web应用程序中使用axios调用该函数:

{
    "expoPushToken": ["ExponentPushToken[xxx-xxxxxxxxxxxxx]"]
}

我检查了一下,此请求上的令牌的格式与邮递员上的令牌相同。

谢谢。

1 个答案:

答案 0 :(得分:1)

这是一个cors问题,通过此修改得以解决:

exports.reportNotification = functions.https.onRequest((request, response) => {
  cors(request, response, () => {
    const tokens = request.body.expoPushToken;
    let messages = [];
    tokens.forEach((token) =>
      messages.push({
        to: token,
        title: "title",
        body: "message",
        sound: "default",
        _displayInForeground: "true",
      })
    );

    axios.post("https://exp.host/--/api/v2/push/send", JSON.stringify(messages), {
      headers: {
        "Accept": "application/json",
        "Accept-encoding": "gzip, deflate",
        "Content-Type": "application/json",
      },
    })
      .then((res) => response.status(200).json({ res: res }))
      .catch((err) => response.status(200).json({ error: err }));
  });
});