Я не могу заставить автозаполнение работать с AngularJS, NodeJS, mssql

#angularjs #sql-server #node.js

#angularjs #sql-сервер #node.js

Вопрос:

Привет, я новичок в AngularJS, и я пытаюсь получить данные из своей базы данных на свой контроллер, чтобы создать панель поиска автозаполнения. Вот мой код, в котором я подключаюсь к своей базе данных и собираю нужные мне данные:

     router.get('/request', function (req, res) {
    connection.then(function(){ //connection is my sql.connect to the confing
       new sql.Request().query("SELECT FullName from Employee").then(function(recordset){
            res.render('request',{json: JSON.stringify(recordset)});       
       }).catch(function(err){
           console.log("Connection Error "   err);
       });
    });
});
  

Вот мой код контроллера:

 app.controller('autocompleteCtrl', ['$scope', '$http', function($scope, $http){
    var self = this;

    self.data = null;
    self.selectedItem = null;
    self.searchText = null;


    self.querySearch = function(){
        $http.get('/users/request').then(function(result){
            self.data = result.data.Search;
            return result.data.Search;
        });
    }
}]);
  

Вот код внутри представления:

 <md-autocomplete md-floating-label="Employee name" 
                            flex="" 
                            md-item-text="item.FullName"
                            md-items="item in ctrl.data" 
                            md-search-text-change="ctrl.querySearch(ctrl.searchText)"
                            md-search-text="ctrl.searchText" 
                            md-selected-item="ctrl.selectedItem" 
                            md-no-cache="ctrl.noCache" 
                            md-input-maxlength="30" 
                            md-input-minlength="3" 
                            md-input-name="autocompleteField" 
                            required="">
              <md-item-template>
                <span md-highlight-text="ctrl.searchText">{{item.FullName}}</span>
              </md-item-template>
              <div ng-messages="searchForm.autocompleteField.$error" ng-if="searchForm.autocompleteField.$touched">
                <div ng-message="required">You <b>must</b> have a favorite movie.</div>
                <div ng-message="minlength">Your entry is not long enough.</div>
                <div ng-message="maxlength">Your entry is too long.</div>
              </div>
            </md-autocomplete>
  

Когда я пытаюсь ввести текст в строке поиска, он выдает ошибку :

Не удается прочитать свойство ‘then’ неопределенного

Я не знаю, как это сделать… Пожалуйста, помогите мне! Спасибо!

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

1. Чтобы получить больше шансов на ответ, я бы где-нибудь загрузил рабочий пример и указал, где именно в коде вы получаете ошибку. Недавно у меня была эта ошибка здесь: github.com/angular/material/blob/master/src/components/… Я больше не знаю, как я это решил, но, глядя на ваш код, я бы попытался установить для данных некоторое начальное значение [] .

2. Как сказал райчу, вам необходимо предоставить дополнительную информацию о коде, в котором возникает ошибка. Но все же я думаю, что ошибка связана с вашим HTTP-вызовом $http.get('/users/request') . проверьте ответ на этот вызов на network вкладке консоли разработчика браузеров. скорее всего, в node.js коде есть проблема на стороне сервера, либо он не отправляет никаких данных, либо полностью выходит из строя.