我创建了一个表单并单击该表单,我想查看服务器(nosejs)的响应。在 Angular Controller 中,我调用该服务。当从服务本身调用时,响应是可见的,但当从 Controller 调用时,什么也没有显示。
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);
});
}
});
NodeJS:
app.post("/register", function(req, res){
var user = req.body;
res.json(user);
});
如果我从服务调用它,我可以看到记录到控制台的响应。但从 Controller 本身调用时没有响应。包含 MyApp.angular.factory
和 MyApp.angular.controller
的原因是我已经在另一个配置文件中声明了 MyApp。
我做错了什么?
最佳答案
为了从工厂获取 Controller 中的响应,请更改工厂中的 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!!!
});
}
您需要在函数内部返回 Promise,并在 then
内部返回结果,以便从调用该函数的任何位置访问它。
关于javascript - Controller 未使用 Angular $http 服务记录来自 Nodejs 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42683707/