undefined不是对象(评估'storeDataFactory.createUser(user).then

时间:2017-05-04 16:07:45

标签: angularjs node.js authentication

函数运行,console.log显示后端的用户对象。我不明白为什么它告诉我这里有问题,而且确实需要一些指导。

vm.register = function() {
    //check that passwords match
  if(vm.password != vm.passwordRepeat) {
    vm.registerError = "Passwords must match.";
    return;
  } else {
    var username = vm.username;
    // console.log("Valid form.  Checking for existing user",username);
    storeDataFactory.userExists(username).then(function(response){
      //if user exists, return error
      if(response.data.length > 0) {
        vm.registerError = "A user with email " + username + " already exists.  Please login.";
        return;
      } else {
        //if no user exists
        if(response.data.length == 0) {
          // console.log("No user exists.  Continue with registration.");
        }
        //assign info to user object
          var user = {
          username: vm.username,
          password: vm.password,
          name: vm.name,
          phone: vm.phone
        };
        **storeDataFactory.createUser(user).then(function(response){**
          vm.user = response.data;
          console.log("Created user", vm.user);
          if(response.data.length > 0) {
            console.log("Created user", vm.user);
            vm.registerMessage = "Successful registration, please login";
            vm.registerError = null;
            vm.user = response.data;  
          }
        }).catch(function(error){
            console.log(error);
            vm.registerError = "There was an error creating your account.";
            vm.registerMessage = null;
            });  
      }
    });
  }

};

后端代码:

    module.exports.register = function(req, res) {
  console.log('registering user', req.body);
  //create the user object with hashed pass
  User
    .create({
    username: req.body.username,
    name: req.body.name,
    phone: req.body.phone,
    password: bcrypt.hashSync(req.body.password, bcrypt.genSaltSync(10))
  }, function(err, user) {
      if (err) {
        console.log("Error creating account");
        res
          .status(400)
          .json(err);
      } else {
        console.log("Account created!", user);
        res
          .status(201)
          .json(user);
      }
    });
};

帐户已创建!并在后端登录用户对象。它只是不会显示那该死的成功注册!请登录。消息。

storeDataFactory代码:

/* global angular */ angular.module('rumbleApp').factory('storeDataFactory', storeDataFactory);

function storeDataFactory($http) {
    return { 
        userExists: userExists,
        createUser: createUser
    };
    function userExists(username) {
        return $http.get('/api/users/userExists/' + username).then(complete).catch(failed);
    }
    function createUser(user) {
        $http.post('/api/users/register', user).then(complete).catch(failed);
    }

    function complete(response) {
        return response;
    }

    function failed(error) {
        console.log(error.statusText);
        return "There was an error with the API call.";
    }

}

1 个答案:

答案 0 :(得分:0)

你确定要从div回来吗?你可以发布该方法的代码吗?

听起来代码正在执行,但你没有从中返回任何东西(因此它认为它是未定义的)