【问题标题】:Not getting response from server. Angularjs, nodejs没有得到服务器的响应。 Angularjs、nodejs
【发布时间】:2016-10-06 04:18:43
【问题描述】:

我正在尝试从我的服务器向客户端获取“成功”或“失败”响应。服务器在 express 框架中的 node.js 中实现,客户端在 angularjs 中实现。

这是服务器端 node.js 部分:

connection.connect();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.sendFile(path.join(__dirname, '../', 'views', 'login.html'));
});
router.get('/login', function(req,res)
{

  console.log("Username:"+req.query.username);
  console.log("Password:"+req.query.password);

  var user = req.query.username;
  var pass = req.query.password

  connection.query("select * from user where login_name = ?", user, function(err, rows, fields) {
                     if (!err){
                        if(user==rows[0].login_name && pass==rows[0].pass){
                            console.log("success");
                            res.json({status: 200});
                        }
                     }
                     else
                         console.log('Error while performing Query.', err);
                     });

这里是 angularjs 部分:

<form name="login">
    <div class="login" ng-app="loginPage" ng-controller="loginController">
        <input type="text" placeholder="username" ng-model="uname" name="userid"><br>
        <input type="password" placeholder="password" ng-model="pword" name="pswrd"><br>
        <!--<input type="button" ng-click="login();" onclick="check(this.form)" value="Login"/>-->
        <button ng-click="login();">Login</button>
    </div>
</form>

<script language="javascript">
    var app = angular.module('loginPage', []);
    app.controller('loginController', function($scope, $http) {
        console.log("inside controller");

        $scope.login = function() {
            console.log("inside the login function");
            console.log($scope.uname);

            var verify = $http({
                method: 'GET',
                url: '/login' +
                '',
                params: { username: $scope.uname, password: $scope.pword }
            }).then(
                    function successful(response) {
                        $scope.theResponse = response.data;
                        window.open("./team_list.html")
                    }, function unsuccessful(response) {
                        alert('Wrong username/password.');
                        $scope.theResponse = response.data;
                    });
        }
    })
</script>

我尝试在浏览器的登录页面上为用户名输入“test”,为 pw 输入“test”,因为这是我在我的 sql 数据库中输入的内容。具体来说,我不确定为什么登录页面没有链接到我为其指定路径的 team_list 页面。

我不确定为什么它不起作用。如果我应该以不同的方式使用 json,我将不胜感激,因为我对它不是很熟悉。

【问题讨论】:

  • 为什么要将 http 调用分配给变量“verify”
  • 你从服务器端得到了什么?您可以通过查询获取用户详细信息吗?

标签: javascript html angularjs node.js web-development-server


【解决方案1】:

NodeJS端的路由顺序错误。 /login 应该排在第一位。否则一切都将由'/' 路线提供服务。

router.get('/login', function(req, res) {

      console.log("Username:" + req.query.username);
      console.log("Password:" + req.query.password);

      var user = req.query.username;
      var pass = req.query.password

      connection.query("select * from user where login_name = ?", user, function(err, rows, fields) {
        if (!err) {
          if (user == rows[0].login_name && pass == rows[0].pass) {
            console.log("success");
            res.json({
              status: 200
            });
          }
        } else
          console.log('Error while performing Query.', err);
      });
/* GET home page. */
router.get('/', function(req, res, next) {
  res.sendFile(path.join(__dirname, '../', 'views', 'login.html'));
});

【讨论】:

  • #Arun ..我认为你的答案不合适..这里与代码的定位无关..
【解决方案2】:

检查您的控制台,您甚至可以从那里找出问题所在。 控制台快捷键

shortcut keys for opening different browsers's Console

【讨论】:

    【解决方案3】:

    这样做

    connection.query("select * from user where login_name = ?", user, function(err, rows, fields) {
         if (!err){
            if(user==rows[0].login_name && pass==rows[0].pass){
                console.log("success");
                res.send(200);
            }
         }
         else{
             console.log('Error while performing Query.', err);
             res.send(401);
         }
     });
    

    实际上,您应该发送错误或成功代码,例如 200 或 401。

    并使用 res.send(ErrorCode)res.sendStatus(ErrorCode) 它会在客户端自动为您完成,如下所示:

    <script language="javascript">
        var app = angular.module('loginPage', []);
        app.controller('loginController', function($scope, $http, $window) {
            console.log("inside controller");
            $scope.login = function() {
                console.log("inside the login function");
                console.log($scope.uname);
                $http.get('/login').then(function (success) {
                    $window.alert('Success');
                }, function (error) {
                    $window.alert('Wrong username/password.');
                });
            }
        });
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2019-09-02
      • 1970-01-01
      相关资源
      最近更新 更多