Функции Firebase - не может прочитать req.body - PullRequest
0 голосов
/ 29 июня 2019

У меня проблема с моим https запросом Firebase Functions.

Это мой код для запуска:

  const express = require('express');
  const bodyParser = require('body-parser');
  const app = express();
  app.use(bodyParser.json());
  app.use(function(req, res, next) {
    res.setHeader('Content-Type', 'application/json');
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    res.header("Access-Control-Allow-Methods", "GET, POST");
    next();
  });
  app.use((err, req, res, next) => {
    if (err instanceof SyntaxError) {
      return res.status(400).send();
    };

    next();
  });
  app.post('/fetchPosts', (req, res) => {
    exports.fetchPosts(req, res);
  });

  exports.widgets = functions.https.onRequest(app);

  const cors = require('cors')({ origin: true })
  exports.fetchPosts = (req, res) => {
      console.log(req.body)
      console.log(res)
    let topics = req.body.topics || ['live'];
    let start = req.body.start || 0;
    let num = req.body.num || 10;
    let next = start+num;
    // setting up the response.
  });

Насколько я могу судить, это выглядит хорошо ..

Теперь, когда я делаю свой вызов API, я делаю:

   var headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded');
    headers.append('Content-Type', 'application/json; charset=UTF-8');
    const request = new RequestOptions({ headers: headers });
    const url = 'https://my-link.cloudfunctions.net/widgets/fetchPosts';
    let payload = {
        topics: ["live", "pets"]
    }
    console.log(JSON.stringify(payload))
    this.http.post(url, JSON.stringify(payload), request)
    .pipe(map((res:Response) => {
      console.log(res.json())
    }))
    .subscribe(
      data => console.log(data),
      err => console.log(err),
      () => console.log('Got feed')
    );

и он просто возвращает topics только с ['live'] .. из-за отказоустойчивости, которую я настроил на бэкэнде ... но почему не получается мой topics, который я отправляю?

Кроме того, когда я console.log(req.body) на бэкэнде, он просто показывает {} .. пустой объект ..

Есть идеи, почему req.body не работает? Я делаю это также с start и num, но все они возвращаются к отказоустойчивому.

1 Ответ

0 голосов
/ 29 июня 2019

Вы должны использовать POST метод для обработки req.body.В вашем случае вы можете обработать свою переменную с помощью req.query

Для обработки req.body.Вы можете использовать Почтальон , затем выбрать POST метод и опубликовать данные как JSON.Вы можете прочитать больше , чтобы хорошо использовать Почтальон .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...