无法发布到Firebase的数据库

时间:2019-07-09 18:55:08

标签: node.js firebase google-cloud-firestore google-cloud-functions

当我尝试使用邮递员将数据发布到Firebase时,出现以下错误: 错误:参数“数据”的值不是有效的Firestore文档。不能使用“未定义”作为Firestore值(在字段正文中找到)。

我检查了一下,body和userHandle返回为undefined,但我不知道为什么。与邮递员一起使用POST,然后在正文中发送一个像这样的json:

{
    "body": "scream 2",
    "userHandle": "user2"
}

作为原始JSON(application / json)

const functions = require('firebase-functions');

const admin = require('firebase-admin');

let firebaseConfig = {
  apiKey: '*******',
  authDomain: '******',
  databaseURL: '*****',
  projectId: '*****',
  storageBucket: '****',
  messagingSenderId: '*****',
  appId: '*******'
};

admin.initializeApp(firebaseConfig);


exports.createScream = functions.https.onRequest((req, res) => {
  if (req.method !== 'POST') {
    return res.status(400).json({ error: 'Method not allowed' });
  }
  const newScream = {
    body: req.body.body,
    userHandle: req.body.userHandle,
    createdAt: admin.firestore.Timestamp.fromDate(new Date())
  };

  admin
    .firestore()
    .collection('screams')
    .add(newScream)
    .then(doc => {
      res.json({ message: `document ${doc.id} created successfully` });
    })
    .catch(err => {
      res.status(500).json({ error: 'something went wrong' });
      console.error(err);
    });
});

3 个答案:

答案 0 :(得分:0)

错误消息是说您要添加到Firestore文档中的字段之一是未定义的:

  const newScream = {
    body: req.body.body,
    userHandle: req.body.userHandle,
    createdAt: admin.firestore.Timestamp.fromDate(new Date())
  };

由于显示的是所有变量,但我们看不到它们的值,所以我们无法确定哪个变量未定义。您将不得不自行调试此错误,以找出未定义的错误,然后修改代码以检查输入是否有效。

答案 1 :(得分:0)

好吧,这有点奇怪,但是在邮递员中,主体设置为原始JSON(application / json),但我再次将其设置为JSON(application / json),现在可以正常工作了。

答案 2 :(得分:0)

根据我的经验:

很多人在使用邮递员时忘记将正文更改为JSON(默认为文本)。查看下面的图片:enter image description here

因此,如果您在右端看到,您会发现以橙色突出显示的JSON。必须将其设置为JSON(如果您尝试推送JSON,当然)。默认情况下,我发现它是文本形式的。

有关您在问题中发布的代码的其他信息最多可以标记。

我真的认为这可能会帮助面临类似问题的人,因此决定提一下。

快乐的编码。