Функция Firebase JS http возвращает неправильный ответ, полученный от вызова AX ios API GET - PullRequest
0 голосов
/ 23 марта 2020

Я написал следующую функцию HTTP firebase JS, которая возвращает неправильный ответ об ошибке статуса 500 с помощью Postman, даже несмотря на то, что ответ на вызов ax ios GET из службы API вернул правильный ответ 200 о состоянии (подтвержденный скриншот вывода консоли ниже)

enter image description here

exports.doshiiMenuUpdatedWebhook = functions.https.onRequest((req, res) => {

  if (req.method === 'PUT') {
    return res.status(403).send('Forbidden!');
  }

  return cors(req, res, () => {

    let verify = req.query.verify;

    if (!verify) {

      verify = req.body.verify;

    }

    let locationId = req.body.data.locationId
    let posId = req.body.data.posId
    let type = req.body.data.type
    let uri = req.body.data.uri
    let itemUri = req.body.data.itemUri

    console.log('locationId', locationId);
    console.log('posId', posId);
    console.log('type', type);
    console.log('uri', uri);
    console.log('itemUri', itemUri);

    const options = {
        headers: {'authorization': 'Bearer ' + req.query.verify}
      };

    return axios.get(uri, options)
      .then(response => {

        console.log('response data: ', response.data);
        console.log('response status: ', response.status);
        console.log('response statusText: ', response.statusText);
        console.log('response headers: ', response.headers);
        console.log('response config: ', response.config);

        return res.status(200).json({
          message: response
        })
      })
      .catch(err => {
        return res.status(500).json({
          error: err
        })
      });
  });
});

В Почтальоне я ожидаю увидеть ответ «Статус: 200», но я получаю это:

enter image description here

В консоли Firebase нет сообщений об ошибках, кроме этого:

enter image description here

1 Ответ

1 голос
/ 23 марта 2020

Как объяснено в документации Express :

res.json([body])

Отправляет ответ JSON. Этот метод отправляет ответ (с правильным типом содержимого), который является параметром, преобразованным в строку JSON с использованием JSON.stringify().

Параметр может быть любого типа JSON, включая объект, массив, string, Boolean, number или null, и вы также можете использовать его для преобразования других значений в JSON.

После «отладки», которую мы сделали в комментариях / чате, кажется, что

{message: response}

объект, который вы передаете json(), генерирует ошибку.


Следуя документации HTTP Cloud Functions , которая гласит:

Внимание! Убедитесь, что все функции HTTP отключены правильно. Правильно завершая функции, вы можете избежать чрезмерных расходов от функций, которые работают слишком долго. Завершите функции HTTP с помощью res.redirect(), res.send() или res.end().

, и поскольку вы объяснили в чате, что вам «нужно только вернуть код состояния» и что вы «хотите» сохранить данные json в: admin.database().ref(/venue-menus/${locationId}/menu) ",

Я бы посоветовал вам сделать следующее:

exports.doshiiMenuUpdatedWebhook = functions.https.onRequest((req, res) => {

    if (req.method === 'PUT') {
        return res.status(403).send('Forbidden!');
    }

    cors(req, res, () => {

        let verify = req.query.verify;

        if (!verify) {
            verify = req.body.verify;
        }

        let locationId = req.body.data.locationId
        let posId = req.body.data.posId
        let type = req.body.data.type
        let uri = req.body.data.uri
        let itemUri = req.body.data.itemUri

        const options = {
            headers: { 'authorization': 'Bearer ' + req.query.verify }
        };

        axios.get(uri, options)
            .then(response => {
                console.log('response data: ', response.data);
                return admin.database().ref(`/venue-menus/${locationId}/menu`).set(response.data)

            })
            .then(response => {
                return res.status(200).end()
            })
            .catch(err => {
                return res.status(500).send({
                    error: err
                })
            })
    })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...