没有得到服务器的响应。 Angularjs,nodejs

时间:2016-10-06 04:18:44

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

我正试图从服务器到客户端获得“成功”或“失败”响应。服务器在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,我会感激更多帮助,因为我对它不太熟悉。

3 个答案:

答案 0 :(得分:0)

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'));
});

答案 1 :(得分:0)

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

shortcut keys for opening different browsers's Console

答案 2 :(得分:0)

这样做

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>