Angular http.post => Облачная функция: чтение данных из POST - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь выполнить простой POST-запрос к облачной функции Google от Angular (используя @angular/common/http), но документы Angular http для v7 едва дают подробных примеров, ничего не указано для того, как прикрепить данные или объект к запрос.

Мой угловой код:

    const url = 'example.com/this/that';

    const httpOptions = {
        headers: new HttpHeaders({
            'Content-Type': 'application/json', 
            'Access-Control-Allow-Origin': '*'
        })
    };

    const data = {
        "id": id, 
        "name": name
    }

    return this.http.post(url, data, httpOptions)
        .subscribe(res => {
            console.log(res);
        });

И моя функция Google Cloud:

export const myFunction= functions.https.onRequest((request, response) => {

    return cors(request, response, () => {

        const id = request.query.id;
        const name = request.query.name;

        console.log('> > > > > > > 1.1 < < < < < < <');
        console.log(request);

        if (!name || !id) {
            return response.status(400).send(`Missing parameters`);
        }

        return response.status(200).send(`Thank you for id ${id} and name ${name}.`);

    });
});

Я всегда получаю 400 "Отсутствующие параметры". Я также попробовал request.body.id. Есть идеи, что я делаю не так? Спасибо!

РЕДАКТИРОВАТЬ :

Неправильно прочитана ошибка в клиентской консоли, req.body действительно работал. Я получаю ошибку разбора. Добавление картинки ошибки

Кроме того, я отправил решение в качестве ответа на этот вопрос. Спасибо Дагу за его помощь, req.query действительно был неправ.

enter image description here

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Решением является не для отправки строки в res.status(200).sent('some string here');, а для отправки объекта :

(в облачной функции Google ответ ):

res.status(200).send({status: 200, message: `Thank you for id ${id}`});
0 голосов
/ 16 ноября 2018

С объектами Express Request , request.query относится к параметрам, поступающим через строку запроса непосредственно в URL. Вы ничего не передаете таким образом, и в результате вы получите пустой объект.

Облачные функции должны автоматически анализировать тело запроса , отформатированное в формате JSON, и помещать результаты в request.body, поэтому используйте его для доступа к своему идентификатору и имени.

...