Не получает ответа от сервера. Angularjs, nodejs

#javascript #html #angularjs #node.js #web-development-server

#javascript #HTML #angularjs #node.js #веб-разработка-сервер

Вопрос:

Я пытаюсь получить ответ «успех» или «сбой» от моего сервера клиенту. Сервер внедряется в node.js в express framework и клиент в 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 amp;amp; 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» для имени пользователя и «test» для pw на странице входа в систему в браузере, потому что это то, что я ввел в свою базу данных sql. В частности, я не уверен, почему страница входа в систему не ссылается на страницу team_list, для которой я указал путь.

Я не совсем уверен, почему это не работает. Если я должен использовать json по-другому, я был бы признателен за дополнительную помощь, потому что я не очень хорошо знаком с ним.

Комментарии:

1. почему вы назначаете http-вызов переменной «verify»

2. что вы получаете со стороны сервера? можете ли вы получить данные пользователя с помощью запроса?

Ответ №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 amp;amp; 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. #Arun .. Я не думаю, что ваш ответ подходит.. Здесь нет ничего общего с позиционированием кода….

Ответ №2:

Проверьте свою консоль, вы даже можете выяснить проблему оттуда. Ярлыки для консоли

сочетания клавиш для открытия консоли разных браузеров

Ответ №3:

сделайте это так :

 connection.query("select * from user where login_name = ?", user, function(err, rows, fields) {
     if (!err){
        if(user==rows[0].login_name amp;amp; 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) or 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>