0

アップデート

チュートリアルが更新され、質問が古くなっています


Thinkster.io AngularJS Tutorial: Learn to build Modern Webapps Chapter 7.Creating your own user data using firebase で複数の問題に遭遇しました。

1 つ目は、新しいユーザーを Firebase Forge に保存することでした。これは、Anna Smother の SO 投稿AngularJS チュートリアル Thinkster.io の第 7 章でありがたいことに解決されましたが、新しいユーザーを登録した後、2 つの TypeError が発生しました。新しいユーザーを登録するとどうなるかを説明します。

  1. 登録フォームに記入します
  2. [登録] をクリックします
  3. 新しいユーザー オブジェクトがコンソールに記録されていることがわかります
  4. ログインします
  5. TypeError: undefined is not a functionコンソールに2 つのエラーが表示される

ここに画像の説明を入力


1 番目の TypeError: undefined は関数ではありません

したがって、最初のエラーを見ると、私の中で3つの場所が指されていることがわかりますuser.js

TypeError: undefined is not a function
    at Object.User.findByUsername (http://localhost:9000/scripts/services/user.js:37:18)
    at setCurrentUser (http://localhost:9000/scripts/services/user.js:8:33)
    at http://localhost:9000/scripts/services/user.js:32:5

最初のエラーが指している私のコードの最初の場所は、 $child in thefindByUsername` 関数の始まりである行 37、列 18 です

findByUsername: function (username) {
  if (username) {
    return users.$child(username);
  }
},

そこから、findByUsernameメソッド呼び出しの始まりである行 8、列 33 を指します。

function setCurrentUser(username) {
  $rootScope.currentUser = User.findByUsername(username);
}

setCurrentUserそして最後に、メソッド呼び出しの始まりである行 32、列 5 を指します。

  users.$save().then(function() {
    setCurrentUser(username);
  });

2 番目の TypeError: undefined は関数ではありません

2 番目の TypeError は、user.js

TypeError: undefined is not a function
    at http://localhost:9000/scripts/services/user.js:14:9

$onこれは、メソッド呼び出しの最初の行 14、列 9 です。

query.$on('loaded', function () {
  setCurrentUser(query.$getIndex()[0]);
});

これら 2 つの TypeError が発生する理由について何か考えはありますか?


ファイル

user.jsサービス

'use strict';

app.factory('User', function ($firebase, FIREBASE_URL, $rootScope) {
  var ref = new Firebase(FIREBASE_URL + 'users');
  var users = $firebase(ref).$asObject();

  function setCurrentUser(username) {
    $rootScope.currentUser = User.findByUsername(username);
  }

  $rootScope.$on('$firebaseSimpleLogin:login', function (e, authUser) {
    var query = $firebase(ref.startAt(authUser.uid).endAt(authUser.uid));

    query.$on('loaded', function () {
      setCurrentUser(query.$getIndex()[0]);
    });
  });

  $rootScope.$on('$firebaseSimpleLogin:logout', function() {
    delete $rootScope.currentUser;
  });

  var User = {
    create: function (authUser, username) {
      users[username] = {
        /*jshint camelcase: false */
        md5_hash: authUser.md5_hash,
        username: username,
        $priority: authUser.uid
      };
      users.$save().then(function() {
        setCurrentUser(username);
      });
    },
    findByUsername: function (username) {
      if (username) {
        return users.$child(username);
      }
    },
    getCurrent: function () {
      return $rootScope.currentUser;
    },
    signedIn: function () {
      return $rootScope.currentUser !== undefined;
    }
  };

  return User;
});

auth.jsコントローラー

'use strict';

app.controller('AuthCtrl',
  function ($scope, $location, Auth, User) {
    if (Auth.signedIn()) {
      $location.path('/');
    }

    $scope.$on('firebaseSimpleLogin:login', function() {
      $location.path('/');
    });

    $scope.login = function() {
      Auth.login($scope.user).then(function() {
        $location.path('/');
      }, function(error) {
        $scope.error = error.toString();
      });
    };

    $scope.register = function () {
      Auth.register($scope.user).then(function (authUser) {
        User.create(authUser, $scope.user.username);
        $location.path('/');
        Auth.login($scope.user);
        console.log(authUser);
      }, function(error) {
        $scope.error = error.toString();
      });
    };
  });
4

1 に答える 1