【问题标题】:Firestore cloud functions http onRequest 'POST'Firestore 云函数 http onRequest 'POST'
【发布时间】:2019-03-06 13:57:32
【问题描述】:

我已将我的 Firestore 云函数设置为从请求中接收对象,但我得到一个空的主体,我从表单中获取数据,然后将其传递给我想在发布请求中发送给我的变量cloud firestore 功能,但我得到一个空的主体,即使云功能运行,我也可以看到结果之间的日志。 我的棱角:

 onSubmit(form:NgForm){
    let data = Object.assign({},form.value);
    // const httpOptions = {
    //   headers: new HttpHeaders({
    //     'Authorization': 'secret-key'
    //   }),
    //   body: 'test'
    //  };
     const dataUser = {
       displayName:data.displayName,
       email: data.email,
      password:data.password
     }


    console.log(data);
     this.http.post(this.endpoint,dataUser).subscribe(res => console.log(res));
 }

我的节点端:

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

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

admin.initializeApp(functions.config().firebase);

exports.AddUser = functions.https.onRequest((req, res) =>{

    console.log("B123oo");
     console.log(req.body);
     console.log("Boo");
    // admin.auth().createUser({
    //     email: body.email,
    //     emailVerified: false,
    //     password: body.password,
    //     displayName: body.displayName,
    //     disabled: false
    // }).then(function(userRecord){
    //     console.log("OK !!! UID: ",userRecord.uid);
    // });

 });

结果日志:

info: User function triggered, starting execution
B123oo
info: {}
Boo

【问题讨论】:

  • 请将代码的图片替换成实际代码作为文本,并使用 Stack Overflow 的格式化工具使其可读。将代码作为文本使其可搜索,使我们能够轻松地使用它来测试您的实际代码并在我们的答案中使用它,通常只是一件好事。
  • 您需要通过res.send(.....); 发回响应,而不仅仅是使用console.log()。我建议您观看来自 Firebase 的视频:youtube.com/watch?v=7IkUgCLr5oA
  • @FrankvanPuffelen 完成,谢谢
  • @RenaudTarnec 我不想将其发回查看或我想使用数据来创建对象
  • @Achraf 我了解,但是您仍然应该发回响应以向云功能表明它已终止。我在之前的评论中提到的 Doug Stevenson 的视频中对此进行了详细解释。

标签: javascript firebase xmlhttprequest google-cloud-firestore google-cloud-functions


【解决方案1】:

要将值显示为 req.body,您实际上并没有为 body 赋值。正文只是填充了您随请求作为数据发送的任何内容。该主体最终将成为您的第二个值,dataUser。我注意到你没有传入你的 httpOptions,这通常是传递给 post() 的第三个参数。最后一部分可能是你的问题。 this.http.post(this.endpoint,dataUser,httpOptions)

好资源:https://itnext.io/working-with-firebase-functions-http-request-22fd1ab644d3

【讨论】:

  • 我添加了但还是同样的问题
  • @Achraf 你的 httpOptions 还被注释掉了吗? dataUser 在发送到服务器之前是否有值?您是否在本地运行 firebase 功能?或者只是在服务器上
  • 不,我删除了评论,并记录了 dataUser 以查看其中是否有值并发送它,在部署它之前在本地运行它,当我将值放入函数时它工作正常所以我认为函数没有问题
  • @Achraf 据我所知,Firebase 函数无法以这种方式在本地可靠地运行。它们可以使用“firebase serve”命令在本地运行,假设您使用它们的 cli 在项目中正确设置了函数。或者我通常使用“firebase serve --only 函数”,这样我就可以将我的函数与我的项目分开运行。一旦它开始运行,它将吐出本地 url 供您的函数指向。同样,假设您正确设置了 index.js。 firebase.google.com/docs/functions/get-started
  • 您好,我发现问题出在标题的内容中,我应该输入 ('Content-Type': 'text/plain')
猜你喜欢
  • 2021-04-11
  • 2019-09-14
  • 2018-12-06
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 2022-09-26
相关资源
最近更新 更多