所以我一直试图理解:return $http.post('/some link')
的含义,但我无法完全理解它。
假设我有一个节点/表达后端,我正在使用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
});
我的问题是:我的思路是否正确?我一直在阅读并重新阅读有关此的角度文档,虽然它提供了一些缓解,但我不能帮助,但我认为我在这里遗漏了一些东西。
答案 0 :(得分:1)
http.post
返回一个承诺。 then
方法最多可以包含2个参数,resolve
处理程序或rejection
处理程序。每个处理程序只占用一个参数。所以在你的例子中:
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*/ });