アップデート
チュートリアルが更新され、質問が古くなっています
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 が発生しました。新しいユーザーを登録するとどうなるかを説明します。
- 登録フォームに記入します
- [登録] をクリックします
- 新しいユーザー オブジェクトがコンソールに記録されていることがわかります
- ログインします
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 the
findByUsername` 関数の始まりである行 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();
});
};
});