在创建工厂服务时,return$http.post在angular中到底意味着什么
what exactly does return $http.post mean in angular when creating a factory service?
所以我一直在努力理解:return $http.post('/some link')
的含义,但我无法完全理解它。
假设我有一个node/express后端,并且使用angular作为前端。我的api中的一个函数是:
var api = express.Router();
//other code
api.post('/login', function(req,res) {
User.findOne({username:req.body.username})
.select('password').exec(function(err, user) {
if (err) {
res.send(err);
return;
} else {
if (!user) {
res.json({message: 'user does not exist!'});
} else {
var validPassword = user.comparePassword(req.body.password);
if (!validPassword) {
res.json({message: 'invalid password!'});
} else {
var token = createToken(user);
res.json({
success: true,
message: "successfully logged in",
token: token
});
}
}
}
})
});
然后我创建一个角度工厂服务,从后端获取数据,如下所示:
var authService = angular.module('authService', {});
authService.factory('Auth', function($http, $q) {
var authFactory = {};
//authToken: factory which has methods to get and set token
authFactory.login = function(username, password, authToken) {
return $http.post('/login', {
username: username,
password: password
})
.then(function(err, data) {
if (err) {
console.log(err);
} else {
AuthToken.setToken(data.token);
return data;
}
})
}
});
通常,POST方法将数据放入后端,它不会返回任何内容,但由于$http.POST返回了一个promise对象,所以我们返回的就是这个对象。在我的例子中,这个对象是这样的:
res.json({
success: true,
message: "successfully logged in",
token: token
});
我的问题是:我的思路正确吗?我一直在阅读和重读关于这方面的有棱角的文件,尽管它让我松了一口气,但我忍不住认为我在这里遗漏了一些东西。
http.post
返回一个promise。then
方法最多可以包含2个参数,一个resolve
处理程序或一个rejection
处理程序。不过,每个处理程序只占用一个1参数。所以在你的例子中:
return $http.post('/login', {
username: username,
password: password
}).then(function(err, data){});
这实际上是错误的。您的resolve
处理程序应该只接受1个参数(正在接收的data
)。如果出现错误,您需要使用第二个参数。
.then(function(data) { /*resolved*/ }, function(err) { /*something happened*/ });
尽管使用catch
:会更好
.then(function(data) { /*resolved*/ })
.catch(function(err) { /*something bad happened*/ });
相关文章:
- DOM元素和angular元素之间的主要区别是什么
- angular.js我如何设置数据什么是响应值
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 注入$window在angular,有什么用
- 通过Nuget安装Angular JS和Angular JS核心有什么区别
- 什么是“;自举;在Angular 2的上下文中是指
- 我可以在React应用程序中使用什么作为Angular的等价物;s$http.get
- 什么'是从对象列表中一次编辑一个对象的正确Angular/Firebase方法
- Angular.js框架的附加js文件用于什么
- 在angular js中,每次应用程序进入状态时,重新加载状态的最佳方式是什么
- Angular:将对象存储在服务中以在视图中显示和将crud函数存储到服务器的最佳方式是什么
- angular 2中使用的“[()]'语法是什么
- 为什么当我们把Math.floor写成HTML angular时,它什么也不返回
- 实际的angular js控制器对象包含什么
- 使用angular.module创建控制器有什么好处(如果有的话)
- JavaScript 作用域和 Angular JS 作用域之间的区别是什么?
- 在 angular.js 中,没有 () 的函数调用与调用 with() 有什么不同吗?
- 在 Angular JS 中更改文本的正确方法是什么
- Angular 什么是在 ng-repeat 指令中访问总对象的最佳方式
- Angular什么时候设置$watches