【发布时间】:2015-12-15 10:25:27
【问题描述】:
我想用 AngularJS、Node 和 MongoDB 实现登录方法。我已经构建了一个用于发送请求的 Restful API。
当我尝试执行 GET 请求时,控制台会出现此错误TypeError: UserService.logIn(...).success is not a function
成功不存在像$http 方式?
我也找到了这个,但我不明白如何调整它以适合我的代码。
HTTP GET“类”操作:Resource.action([parameters], [success], [错误])
非 GET “类”操作:Resource.action([parameters], postData, [成功],[错误])
非 GET 实例操作:instance.$action([parameters], [success], [错误])
Service.js
var appServices = angular.module('starter.services', ['ngResource']);
appServices.factory('UserService', function ($resource) {
return {
logIn: function (email, password) {
return $resource("http://localhost:3000/users/login", {
email: email,
password: password
});
}
}
});
Controller.js
var apps = angular.module('starter.controller', []);
apps.controller('loginCtrl', function ($scope, $ionicPopup, $state, UserService) {
$scope.doLogin = function doLogin(email, password) {
if (email != null && password != null) {
UserService.logIn(email, password).success(function (data) {
$state.go('tabs.home');
}).error(function (status, data) {
var ionicPop = $ionicPopup.alert({
title: 'Login Failed',
template: 'Invalid email or password.\nPlease try again!'
});
console.log(status);
console.log(data);
});
}
};
});
【问题讨论】:
-
在这里使用
$resource有什么意义?为什么不$http? -
我认为 .success() 和 .error() 方法已被弃用。请改用 .then(successHandler, errorHandler) 或 .then(successHandler).catch(errorHandler)。
-
@ShaunScovil 我试过这个,但错误与前一个相同,但用 then 而不是成功。我认为问题在于我传递的参数(电子邮件,密码)
-
在下面查看我的答案。通常,您将创建一个处理登录/注销的身份验证服务,并在用户登录时设置一个带有令牌的标头,该令牌可以传递给每个其他 API 端点调用。所以你的
UserService可能是一个配置为点击http://localhost:3000/users/:userId的资源,你可以在登录后调用它,传递当前登录的用户ID,如UserService.get(userId);。
标签: javascript angularjs mongodb angular-resource