![](/img/trans.png)
[英]{{$index}} of ng-repeat computed after linker function of angular directive. $compile it?
[英]Pass NodeJS function to an Angular Directive.
如果用户输入错误的用户名或密码,我目前正在尝试显示错误消息。 棘手的部分是我没有使用EJS或Handlebars或任何类型的模板引擎,而是使用带有Bootstrap的原始HTML。
我看到了另一个很好的问题 ,关于如何将值从Nodejs传递到Angular的类似问题 。 可悲的是,这似乎没有帮助。
这是我的NodeJS + Passport用户身份验证功能:
function isLoggedIn(req, res, next) {
console.log('here is Authenticated', req.isAuthenticated());
if (req.isAuthenticated()){
return next();
}else{
res.json({"message": "Failed login. Wrong Username or Password"});
res.redirect('/login');
console.log("NO PERMISSION HAS BEEN GIVEN");
}
}
所以我的想法是将消息作为JSON对象发送并通过Angular get
:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
$http.get("/login").then(function(data){
$scope.message = data;
console.log("message loaded" + data);
});
});
当然,我尝试使用{{message}}
显示消息。
遗憾的是,此方法无法正常工作,我正在尝试使用ng-show
的第二种方法。
我可以将NodeJS函数传递给ng-show
吗? 类似于:
<div class="alert alert-danger" ng-show="isAuthenticated = true">
<p> Failed login message </p>
</div>
如果没有,如何在不使用jade,车把或任何其他模板引擎的情况下向静态html文件显示失败的登录消息?
这里有几件事情可能会有所帮助:
首先,您应避免发送多个请求响应,因此应删除res.redirect('/login');
。
您的res.json({"message": "Failed login. Wrong Username or Password"});
终止响应,因此重定向永远不会运行,并且重定向将使您无法为用户显示错误消息。 此外,您还应该将正确的状态代码发送给客户端(在这种情况下为401 未经授权 ),以使其知道请求未成功。 例如:
function isLoggedIn(req, res, next) {
console.log('here is Authenticated', req.isAuthenticated());
if (req.isAuthenticated()){
return next();
} else{
res.status(401).json({"message": "Failed login. Wrong Username or Password"});
}
}
在客户端, $http
返回带有.data
属性的响应对象,该属性包含您从服务器发送的响应的有效负载。 您需要使用它来访问包含失败登录消息的JSON。 还要注意,您正在将对象发送给客户端,因此您需要通过res.data.message
访问字符串的实际文本。
还要注意,使用$http
, 只有状态码在200范围内的响应才被认为是成功的。 因此,如果登录失败,则可以在错误处理程序中处理失败的登录。 这样,您的UI可以根据登录是否成功来决定要做什么。 例如:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
$http.get("/login").then(function(res){
// Do stuff if login is successful
})
.catch(function(res) {
$scope.message = res.data.message;
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.