【问题标题】:Trying to render a page from node js after making post request through angularjs通过angularjs发出发布请求后尝试从节点js渲染页面
【发布时间】:2017-02-10 20:38:22
【问题描述】:

我正在尝试在来自角度控制器的发布请求之后从 nodejs 呈现页面。但是,该页面不会加载,它会停留在同一页面上。控制台中没有错误。此外,在浏览器开发工具中,我可以看到在 Network--Preview 部分下加载的页面。 这是正确的还是建议的方式?我想,控件返回到控制器而不是从节点渲染页面。我们如何避免这种情况或者有更好的方法来做到这一点? 任何帮助表示赞赏。

来自控制器的发布请求:

$http({

                method : "POST",
                url: '/afterSignin',
                data: {
                        "inputUsername": $scope.inputUsername,
                        "inputPassword": $scope.inputPassword

                    }

                }).success(function(data)
                    {

                            if(data.statusCode==401)
                            {
                                $scope.msg = "Invalid Username or Password";
                            }

                            else
                            {
                                console.log(data.statusCode);
                                console.log("login successfull");


                            }

服务器端代码(afterSignIn.js)

mysql.fetchData(function(err,results){
        if(err){
            throw err;
        }
        else 
        {
            if(results.length > 0){
                console.log("valid Login");

                     res.render('successLogin', { data: results } , function(err, result) {

                    // render on success
                    if (!err) {
                        res.end(result);
                    }
                    // render or error
                    else {
                        res.end('An error occurred');
                        console.log(err);
                    }
                });

控制台输出:

连接关闭.. 数据库结果:[对象对象] 有效登录 [0mPOST /afterSignin [32m200 [0m103.425 ms -

Chrome Console Output

【问题讨论】:

  • 该渲染将作为对 $http 进行的 ajax 调用的响应发送。除非你对那个响应做点什么,否则什么都不会改变。不太清楚你期望发生什么
  • 这是一种登录应用程序。用户登录并成功登录后用户应重定向到主页。有没有其他方法可以做到这一点?
  • 通常在 Angular 应用程序中通过内部应用程序路由器(单页应用程序)完成。如果您想完全重新加载页面,那么您要么不使用$http 提交并使用浏览器默认表单提交过程,要么在成功回调中执行 javascript 重定向

标签: javascript jquery angularjs node.js


【解决方案1】:

Look at this answer 有很多很好的解决方案。可能最简单的就是替换 window 的 URL:

$http({
    method : "POST",
    url: '/afterSignin',
    data: {
            "inputUsername": $scope.inputUsername,
            "inputPassword": $scope.inputPassword

        }
    }).success(function(data){
                if(data.statusCode==401) {
                    $scope.msg = "Invalid Username or Password";
                }else {
                    console.log(data.statusCode);

                    // Interesting part, redirect the user
                    $window.location = '/successLogin'
                }
    });

如您所见,在收到表明登录成功的响应后,您可以在客户端重定向用户。 (您必须注入 $window 作为服务/控制器的依赖项。)

更好的解决方案是使用客户端路由器包,例如ui-router(你应该往这边走)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 2017-12-24
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多