控制器未使用 Angular $http 服务记录来自 Nodejs 的响应
Controller not logging response from Nodejs using Angular $http service
我创建了一个表单并单击了我想查看来自服务器 (nosejs) 的响应的表单。在 Angular 控制器中,我正在调用该服务。从服务本身调用时,响应是可见的,但从控制器调用时,什么也没有显示。
控制器:
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);
});
如果我从服务调用它,我可以看到记录到控制台的响应。但是从控制器本身调用时没有响应。包含 MyApp.angular.factory
和 MyApp.angular.controller
的原因是我在另一个配置文件中声明了 MyApp。
我做错了什么?
为了在您的控制器中获得来自工厂的响应,请像这样更改您工厂中的 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!!!
});
}
您需要 return 函数内部的 promise 和 then
return 结果内部的 promise,以便从您调用函数的任何地方访问它。
您需要再添加 1 个参数、回调和return对回调函数的响应
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
});
}
与使用基于回调的 API 的 node.js 不同,AngularJS 框架使用基于承诺的 API。 Return promise 并使用其 .then
方法:
控制器
app.controller("loginCtrl", function($scope, UserService){
$scope.name = "TestName";
$scope.check = function(user){
//UserService.createUser(user, function(response){
//USE .then method
return UserService.createUser(user).then(function(data) {
$scope.userinfo = data;
console.log("FROM Ctrlr: " + data);
return data;
}).catch(function(errorResponse) {
console.log(errorResponse.status);
throw errorResponse;
});
}
});
服务
function createUser(user){
var promise = $http.post("/register", user).then(function(response){
var data = response.data;
console.log("FROM Srvc:" +data);
//RETURN data to chain
return data;
});
//RETURN promise
return promise;
}
不要将基于承诺的 API 转换为回调类型的 API。它被认为是一种反模式。
见
我创建了一个表单并单击了我想查看来自服务器 (nosejs) 的响应的表单。在 Angular 控制器中,我正在调用该服务。从服务本身调用时,响应是可见的,但从控制器调用时,什么也没有显示。
控制器:
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);
});
如果我从服务调用它,我可以看到记录到控制台的响应。但是从控制器本身调用时没有响应。包含 MyApp.angular.factory
和 MyApp.angular.controller
的原因是我在另一个配置文件中声明了 MyApp。
我做错了什么?
为了在您的控制器中获得来自工厂的响应,请像这样更改您工厂中的 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!!!
});
}
您需要 return 函数内部的 promise 和 then
return 结果内部的 promise,以便从您调用函数的任何地方访问它。
您需要再添加 1 个参数、回调和return对回调函数的响应
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
});
}
与使用基于回调的 API 的 node.js 不同,AngularJS 框架使用基于承诺的 API。 Return promise 并使用其 .then
方法:
控制器
app.controller("loginCtrl", function($scope, UserService){
$scope.name = "TestName";
$scope.check = function(user){
//UserService.createUser(user, function(response){
//USE .then method
return UserService.createUser(user).then(function(data) {
$scope.userinfo = data;
console.log("FROM Ctrlr: " + data);
return data;
}).catch(function(errorResponse) {
console.log(errorResponse.status);
throw errorResponse;
});
}
});
服务
function createUser(user){
var promise = $http.post("/register", user).then(function(response){
var data = response.data;
console.log("FROM Srvc:" +data);
//RETURN data to chain
return data;
});
//RETURN promise
return promise;
}
不要将基于承诺的 API 转换为回调类型的 API。它被认为是一种反模式。
见