Javascript 控制器未使用$http服务记录来自NodeJ的响应

Javascript 控制器未使用$http服务记录来自NodeJ的响应,javascript,angularjs,node.js,angularjs-http,Javascript,Angularjs,Node.js,Angularjs Http,我创建了一个表单,并单击了一个表单,以查看来自服务器的响应(nosejs)。在Angular Controller中,我正在调用服务。当从服务本身调用时,响应是可见的,但是当从控制器调用时,什么也不显示 控制器: MyApp.angular.controller("loginCtrl", function($scope, UserService){ $scope.name = "TestName"; $scope.check = function(user){

我创建了一个表单,并单击了一个表单,以查看来自服务器的响应(nosejs)。在Angular Controller中,我正在调用服务。当从服务本身调用时,响应是可见的,但是当从控制器调用时,什么也不显示

控制器:

MyApp.angular.controller("loginCtrl", function($scope, UserService){
    $scope.name = "TestName";

    $scope.check = function(user){

        UserService.createUser(user, function(response){
            $scope.userinfo = response;
            console.log("FROM Ctrlr: " + response);
        });
    }

});
MyApp.angular.factory("UserService", function($http,$location){

        var service = {
            createUser: createUser
        };

        return service;

        function createUser(user){
            $http.post("/register", user).then(function(response){

            console.log("FROM Srvc:" +response);
            });
        }
});
app.post("/register", function(req, res){
    var user = req.body;
res.json(user);
});
服务:

MyApp.angular.controller("loginCtrl", function($scope, UserService){
    $scope.name = "TestName";

    $scope.check = function(user){

        UserService.createUser(user, function(response){
            $scope.userinfo = response;
            console.log("FROM Ctrlr: " + response);
        });
    }

});
MyApp.angular.factory("UserService", function($http,$location){

        var service = {
            createUser: createUser
        };

        return service;

        function createUser(user){
            $http.post("/register", user).then(function(response){

            console.log("FROM Srvc:" +response);
            });
        }
});
app.post("/register", function(req, res){
    var user = req.body;
res.json(user);
});
NodeJS:

MyApp.angular.controller("loginCtrl", function($scope, UserService){
    $scope.name = "TestName";

    $scope.check = function(user){

        UserService.createUser(user, function(response){
            $scope.userinfo = response;
            console.log("FROM Ctrlr: " + response);
        });
    }

});
MyApp.angular.factory("UserService", function($http,$location){

        var service = {
            createUser: createUser
        };

        return service;

        function createUser(user){
            $http.post("/register", user).then(function(response){

            console.log("FROM Srvc:" +response);
            });
        }
});
app.post("/register", function(req, res){
    var user = req.body;
res.json(user);
});
如果我从服务调用它,我可以看到记录到控制台的响应。但从控制器本身调用时没有响应。包含
MyApp.angular.factory
MyApp.angular.controller
的原因是我已经在另一个配置文件中声明了MyApp


我做错了什么?

为了从工厂获得控制器中的响应,请在工厂更改
createUser
func,如下所示:

function createUser(user){
            //notice the return here!!!
            return $http.post("/register", user).then(function(response){

            console.log("FROM Srvc:" +response);
            return response.data; //notice the return here too!!!
            });
        }

您需要在函数内部和
内部返回承诺,然后
返回结果,以便从调用函数的任何位置访问它。

为了从工厂获得控制器中的响应,请在工厂中更改
createUser
函数,如下所示:

function createUser(user){
            //notice the return here!!!
            return $http.post("/register", user).then(function(response){

            console.log("FROM Srvc:" +response);
            return response.data; //notice the return here too!!!
            });
        }

您需要在函数内部和
内部返回承诺,然后
也返回结果,以便从调用函数的任何位置访问它。

您需要再添加一个参数,callback并返回对回调函数的响应

 function createUser(user, callback){
        $http.post("/register", user).then(function(response){

        console.log("FROM Srvc:" +response);

         callback(response);  // return the response in the callback function
        });
 }

您需要再添加一个参数callback,并将响应返回给callback函数

 function createUser(user, callback){
        $http.post("/register", user).then(function(response){

        console.log("FROM Srvc:" +response);

         callback(response);  // return the response in the callback function
        });
 }

与node.js使用基于回调的API不同,AngularJS框架使用基于承诺的API返回承诺并使用其
。然后
方法:

控制器 服务
不要将基于承诺的API转换为回调类型的API。这被认为是一种反模式


参见

与node.js使用基于回调的API不同,AngularJS框架使用基于承诺的API返回承诺并使用其
。然后
方法:

控制器 服务
不要将基于承诺的API转换为回调类型的API。这被认为是一种反模式


请参阅

UserService.createUser
方法既不返回任何内容,也不接收要处理的回调。如果您没有以某种方式返回
response
对象,您怎么能期望控制器中的
response对象呢?恕我冒犯,兄弟姐妹,但在深入研究Angular这样的框架之前,您可能首先要熟悉JavaScript语言的整体。话虽如此,如果你确实必须/想要开始深入研究Angular,那么就找一个涵盖你感兴趣的主题的好例子项目,并模仿他们所做的,直到你了解发生了什么。@Pytth谢谢。从整体上学习JS需要很长时间。但是谢谢。我学到了一些有棱角的承诺和这个问题的原因。但是谢谢。我明白你的意思。
UserService.createUser
方法既不返回任何内容,也不接收要处理的回调。如果您没有以某种方式返回
response
对象,您怎么能期望控制器中的
response对象呢?恕我冒犯,兄弟姐妹,但在深入研究Angular这样的框架之前,您可能首先要熟悉JavaScript语言的整体。话虽如此,如果你确实必须/想要开始深入研究Angular,那么就找一个涵盖你感兴趣的主题的好例子项目,并模仿他们所做的,直到你了解发生了什么。@Pytth谢谢。从整体上学习JS需要很长时间。但是谢谢。我学到了一些有棱角的承诺和这个问题的原因。但是谢谢。我明白你的意思。为什么我的答案会被否决。嘿,downvoter,展示你自己不要将基于承诺的API转换为回调类型的API。这被认为是一种反模式。看看为什么我的答案会被否决。嘿,downvoter,展示你自己不要将基于承诺的API转换为回调类型的API。这被认为是一种反模式。看见