Отказ от ответственности:
Я пытался решить ту же проблему с помощью NodeJS, и я могу получить решение
Я понимаю, что это старый вопрос. Но я чувствовал, что стоит ответить на этот вопрос, поскольку я потратил почти 2 часа, чтобы найти ответ на этот вопрос.
Сценарий - 1: запуск функции облака через планировщик облака
- Функция не может прочитать сообщение в теле запроса.
Сценарий - 2: запуск облачной функции через вкладку «Тест» в интерфейсе облачной функции
- Вызов функции всегда выполняется без ошибок.
Что я нашел?
- Когда подпрограмма GCF выполняется через Cloud Scheduler, она отправляет заголовок
content-type
как application/octet-stream
. Это делает экспресс js неспособным анализировать данные в теле запроса, когда планировщик облака отправляет данные.
- Но когда для проверки функции через интерфейс облачной функции используется точно такое же тело запроса, все работает нормально, потому что функция Testing в интерфейсе отправляет заголовок
content-type
как application/json
и выражает js может читать тело запроса и анализирует данные как объект JSON.
Решение
Мне пришлось вручную анализировать тело запроса как JSON (явно используя условие if на основе заголовка типа содержимого), чтобы получить данные в теле запроса.
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.helloWorld = (req, res) => {
let message = req.query.message || req.body.message || 'Hello World!';
console.log('Headers from request: ' + JSON.stringify(req.headers));
let parsedBody;
if(req.header('content-type') === 'application/json') {
console.log('request header content-type is application/json and auto parsing the req body as json');
parsedBody = req.body;
} else {
console.log('request header content-type is NOT application/json and MANUALLY parsing the req body as json');
parsedBody = JSON.parse(req.body);
}
console.log('Message from parsed json body is:' + parsedBody.message);
res.status(200).send(message);
};
Это действительно особая проблема, которую Google должен решить, и, надеюсь, Google скоро исправит ее.
Облачный планировщик - проблема с заголовком типа контента