主体"/>
使用node.js从Google Cloud Function中的IncomingMessage对象读取主体
我有一个基于node.js 8的Google Cloud Function,我想处理IncomingMessage
对象的主体。我无法通过req.body
中列出的Google Examples访问主体。我得到req.body
是不确定的。
如果登录req
对象,则会得到一个IncomingMessage
对象,因此,我尝试按照here的说明读取正文,最后得到以下实现。
'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对象获取主体?
回答如下:[不确定,但是在Google编写的示例中,他们引用了Express
,而您引用了NodeJS普通http
模块问题的解决方案。我不确定express
本身是否使用了它。
您的“数据”事件的监听器是否被调用了?如果不是,这就是body
为空的原因,您之前将其定义为空,并且data
事件从未调用过监听器。
将req.data
设置为undefined
的原因可能是因为undefined
中默认将其设置为Express
。当express
指向其documentation时,您将需要一个解析器。
您可以使用类似body-parser的模块来填充req.body
。
希望对您有帮助。
更多推荐
使用node.js从Google Cloud Function中的IncomingMessage对象读取主体
发布评论