请求体是空对象。

3

我在客户端使用类似以下数据的fetch方法将数据发送到Firebase Node.js服务器上的webhook。

const url = 'https://us-central1-<app>.cloudfunctions.net/addUserdata';
const data = {
  firstName: 'John',
  lastName: 'Doe',
  email: 'john.doe@email.com'
}

const request = new Request(url, {
  method: 'POST',
  body: data,
  mode: 'no-cors',
  headers: new Headers()
});

fetch(request)
.then(function(result) {
    console.log(result);
})

目前我只是想像这样获取数据。

exports.addUserdata = functions.https.onRequest((req, res) => {
  console.log(req.body);
  res.send(200);
});

很不幸,我的 req.body 是一个空对象。我错过了什么或做错了什么?
2个回答

3
JSONFormDataBlob对象或字符串传递给bodyRequest.body不期望JavaScript对象。
body: JSON.stringify(data)

1
请参考Request()中的注释:“请求体类型只能是BlobBufferSourceFormDataURLSearchParamsUSVStringReadableStream类型,因此如果要将JSON对象添加到有效载荷中,您需要对该对象进行字符串化。”,另请参阅使用ReadableStream进行Fetch - guest271314

0
在POST请求中,你需要稍等一下才能获取到request.body中的数据。
    var body = '';
    req.on('data',function(data) { body += data; });
    req.on('end', function(data) {
        req.body = JSON.parse(body);
    });

仍然得到一个空对象。 - Thore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接