繁体   English   中英

将NodeJS函数传递给Angular指令。

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM