Чтение тела из объекта IncomingMessage в облачной функции Google с node.js - PullRequest
0 голосов
/ 19 января 2020

У меня есть функция Google Cloud, основанная на node.js 8, и я хочу обработать тело объекта IncomingMessage. Я не могу получить доступ к телу через req.body, как указано в Google Примеры . Я получаю req.body не определено.

Если я регистрирую объект req, я получаю объект IncomingMessage, поэтому я пытаюсь прочитать тело, как объяснено здесь , и в итоге получаю следующую реализацию.

'use strict';

exports.insertSuccessfulConsent = (req, res) => {
    console.log(`METHOD: ${req.method}`);
    console.log(`HEADERS: ${JSON.stringify(req.headers)}`);

    let body = "";

    req.on('data', chunk => {
        body += chunk.toString(); 
    });

    req.on('end', () => {
        console.log(body);
    });

    console.log('Body: ' + body); 


    let message = 'POST processed';
    res.status(200).send(message);
};

К сожалению, тело пусто, хотя запрос HTTP POST содержит данные в теле. Это мой тестовый вызов:

curl -X POST HTTP_TRIGGER_ENDPOINT -H "Content-Type:application/json" -d '{"name":"Jane"}'

В журнале указаны правильные заголовки и методы HTTP, отсутствует только тело.

Вопрос в том, как мне получить тело от объекта req?

1 Ответ

1 голос
/ 22 января 2020

Я не уверен, но в примере, написанном Google, они ссылаются на Express, а вы указали решение проблемы с модулем NodeJS plain http. Я не уверен, подходит ли он здесь, несмотря на то, что он используется express.

Ваш слушатель события 'data' даже вызывается? Если нет, это причина, по которой ваш body пуст, вы определили его как пустой ранее, и ваш слушатель никогда не вызывался событием data.

Причина, по которой ваш req.data установлен как undefined, вероятно, потому что это undefined по умолчанию в Express. Вам понадобится парсер, так как express указывает на его документацию .

Вы можете использовать что-то вроде body-parser module для заполнения вашего req.body.

Надеюсь, это поможет.

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