2017-04-27 9 views
0

Ich, m neu in Angularjs und MongoDB Ich muss HTTP-Anfrage von MongoDB für automatisch vervollständigen eckigen Material, wenn ich an git Hub API senden funktioniert es perfekt, aber für meine DB, ich bekomme length 'undefinierter '' Can not Eigenschaft lesen' mein Controller in Client-SeiteAngularjs http erhalten Anfrage zurück 'Länge' Fehler

/*jslint latedef:false*/ 
(function() { 
    'use strict'; 
    angular 
     .module('clientApp') 
     .controller('CarnetCtrl', function($http){ 

     this.querySearch = function(query){ 
     //for this link work "https://api.github.com/search/users" 
     return$http.get("http://localhost:3000/carnet/export_countries/", { 
       params: { 
        q: query 
       } 
      }).then(function(response){ 
       return response.data.items; 
      }); 

     }; 
     }); 

})(); 

mein Controller für meine MongoDB

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var Q = require('q'); // We can now use promises! 



//Create Schema 
var CarnetExportCountriesSchema = new Schema({ 


CarnetExportCountriesSchema.statics.getCarnetExportCountries = function(Country_Name_EN) { 

    var deferred = Q.defer(); 

    this.findOne({Country_Name_EN: Country_Name_EN}, function(error, CarnetExportCountries){ 

     if (error) { 

      deferred.reject(new Error(error)); 
     } 
     else { 

      deferred.resolve(manufacturers); 
     } 
    }); 

    return deferred.promise; 
} 


CarnetExportCountriesSchema); 



module.exports = CarnetExportCountriesSchema; 

und index.js Server-Seite:

//Add Middleware necessary for REST API's 
app.use(bodyParser.urlencoded({extended: true})); 
app.use(bodyParser.json()); 
app.use(bodyParser.json({type:'application/vnd.api+json'})); 
app.use(methodOverride('X-HTTP-Method-Override')); 

//CROS Support 
app.use(function(req,res,next){ 
    res.header('Access-Control-Allow-Origin','*'); 
    res.header('Access-Control-Allow-Methods','GET,PUT,POST,DELETE'); 
    res.header('Access-Control-Allow-Headers','Content-Type'); 
    res.header('("Content-Length", ""+json.length());'); 
    next(); 
}); 

mein app.js

.config(function (
    $routeProvider, 
    RestangularProvider 
    ) { 
    RestangularProvider.setBaseUrl('http://localhost:3000'); 
    $routeProvider 
     .when('/main', { 
     templateUrl: 'views/main.html', 
     controller: 'MainCtrl', 
     controllerAs: 'main' 
     }) 

mein Fehler:

TypeError: Cannot read property 'length' of undefined 
    at hasMatches (angular-material.js:25423) 
    at shouldShow (angular-material.js:25415) 
    at shouldHide (angular-material.js:25380) 
    at setLoading (angular-material.js:25371) 
    at angular-material.js:25564 
    at handleCallback (angular.js:17010) 
    at angular.js:16825 
    at processQueue (angular.js:16843) 
    at angular.js:16887 
    at Scope.$digest (angular.js:17982) "Possibly unhandled rejection: {}" 

bitte mich in dieser Angelegenheit helfen ich um 1 Woche suchen und lesen, aber dieses Problem nicht lösen können

+2

Wie erwarten Sie, dass jemand es in diesem Durcheinander findet? Sie müssen Ihren Code auf ein prägnantes Beispiel herunterkochen, das das Problem reproduziert. –

+0

Sorry für mein Durcheinander Ich versuche, einen Teil des Codes zu reduzieren –

Antwort

0

Versuchen Sie, entfernen res.header('("Content-Length", ""+json.length());');

+0

Ich entferne bereits den gleichen Fehler –

+0

Was gibt 'carnet/export_countries /' zurück? –

+0

{ _id: "58fdcd928816ed1112297592" Country_ISO: "AD", Country_Name_EN: "Andorra" country_id: 1845 Airport_ID: 2, Country_Name_DE: "Andorra" Country_Name_FR: "Andorre" Country_Name_IT: "Andorra", Country_Name_HU: "Andorra", Country_Name_PL: "Andora", Country_Name_SK: "Andorra", Country_Name_CZ: "Andorra", Country_Name_ES: "Andorra", Country_Name_SE: "Andorra", Country_Name_NL: " Andorra ", Country_Name_TR:" Andora ", Coun try_Name_DK: "Andorra", Country_Name_FI: "Andorra", Country_Name_RO: "Andora" }, braucht nur Country_Name_EN diesem Index –

0

Bitte überprüfen Sie, ob return$http.get geschrieben als ein Wort (whitespace zwischen Rückkehr und $ http) und eine Prüfung bei der Antwort

if(response && response.data && response.data.items){ 
return response.data.items 
} 
return []; 
machen
+0

' zurück $ http.get' ist kein Wort sein mit Leerzeichen für Antwort Ich überprüfe jetzt keine Fehlerlänge, aber keine Antwort sowie 'https: // api.github.com/search/users' funktioniert gut, nur die ganze Seite vor Show-Ergebnis aktualisieren –

+0

ich Aggregat bereits hinzufügen Ich kann alle Länder in Aussicht bekommen, aber Fehler als' md-Autocomplete: Konnte Anzeige nicht auflösen Wert für eine Zeichenfolge. Bitte überprüfen Sie das 'md-item-text' Attribut' und alle Länder zeigen bei Autocomplete' md-item-text = "item.Country_Name_EN" 'und' .then (function (response) { \t \t \t zurück response.data; 'wo ich mich geirrt habe ??? @Leibale Eidelman –

Verwandte Themen