Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Firebase云函数无法读取属性';显示名称';未定义的_Node.js_Firebase_Firebase Authentication_Google Cloud Functions - Fatal编程技术网

Node.js Firebase云函数无法读取属性';显示名称';未定义的

Node.js Firebase云函数无法读取属性';显示名称';未定义的,node.js,firebase,firebase-authentication,google-cloud-functions,Node.js,Firebase,Firebase Authentication,Google Cloud Functions,我想在谷歌登录我的android应用程序后,在实时数据库中创建用户配置文件。 所以,我在云函数中尝试了这段代码 const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(functions.config().firebase); exports.AddAccount = functions.auth.user().onCreate(

我想在谷歌登录我的android应用程序后,在实时数据库中创建用户配置文件。 所以,我在云函数中尝试了这段代码

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

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

exports.AddAccount = functions.auth.user().onCreate(event => {

    const user = event.data;
    var userObject = {
        displayName : user.displayName,
        email : user.email,
        photoUrl : user.photoURL,
        createdOn : user.metadata.createdAt
    };
    admin.database().ref('users/' + user.uid).set(userObject);
});
部署此代码后,我在我的应用程序中进行了测试。 它显示出错误

TypeError: Cannot read property 'displayName' of undefined
at exports.AddAccount.functions.auth.user.onCreate.event (/srv/index.js:10:22)
at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:131:23)
at /worker/worker.js:825:24
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
TypeError:无法读取未定义的属性“displayName”
位于exports.AddAccount.functions.auth.user.onCreate.event(/srv/index.js:10:22)
在cloudFunction(/srv/node_modules/firebase functions/lib/cloud functions.js:131:23)
at/worker/worker.js:825:24
在
在进程中。_tickDomainCallback(internal/process/next_tick.js:229:7)
请帮助我修复此错误

此方法返回的是用户对象,而不是包含数据的事件:

exports.AddAccount = functions.auth.user().onCreate(user => {
  const userObject = {
    displayName : user.displayName,
    email : user.email,
    photoUrl : user.photoURL,
    createdOn : user.metadata.createdAt
  };

  return admin.database().ref('users/' + user.uid).set(userObject);
});

关于另一个错误。不允许导入值
未定义的属性。这应该是定义的,
null
,或者根本不放

出现错误的原因是对象具有该属性

为了安全起见,您可以这样做:

const userObject = {
  displayName : user.displayName,
  email : user.email,
  photoUrl : user.photoURL,
  createdOn : user.metadata.creationTime || null
};
建议您在推送新函数之前仔细阅读文档和API,这将节省您的时间:)

该方法返回一个用户对象,而不是一个包含数据的事件:

exports.AddAccount = functions.auth.user().onCreate(user => {
  const userObject = {
    displayName : user.displayName,
    email : user.email,
    photoUrl : user.photoURL,
    createdOn : user.metadata.createdAt
  };

  return admin.database().ref('users/' + user.uid).set(userObject);
});

关于另一个错误。不允许导入值
未定义的属性。这应该是定义的,
null
,或者根本不放

出现错误的原因是对象具有该属性

为了安全起见,您可以这样做:

const userObject = {
  displayName : user.displayName,
  email : user.email,
  photoUrl : user.photoURL,
  createdOn : user.metadata.creationTime || null
};

在推出新函数之前,最好仔细阅读文档和API,这将为您节省时间:)

我已经尝试了您的代码,但它显示了新的错误<代码>错误:Reference.set失败:第一个参数包含未定义的属性“users.GvnKc7CF1mMZRzSA27fJ491tLID3.createdOn”….
@RachitSingh我已更新我的答案以帮助您解决其他错误谢谢您的帮助。在数据库中创建的配置文件显示错误
函数返回了未定义的预期承诺或值
为什么?这现在是一个完全不同的问题。当所有异步工作完成时,您需要从函数返回一个承诺。这不是可选步骤。我已经尝试了你的代码,但它是显示新的错误<代码>错误:Reference.set失败:第一个参数包含未定义的属性“users.GvnKc7CF1mMZRzSA27fJ491tLID3.createdOn”….
@RachitSingh我已更新我的答案以帮助您解决其他错误谢谢您的帮助。在数据库中创建的配置文件显示错误
函数返回了未定义的预期承诺或值
为什么?这现在是一个完全不同的问题。当所有异步工作完成时,您需要从函数返回一个承诺。这不是可选步骤。