2016-11-08 6 views
0

Ich versuche, ein einfaches Messageboard mit MongoDB, Angular, NODE.js und Express zu erstellen.HTTP GET wird nicht ausgelöst

Aus irgendeinem Grund das erste Mal, wenn ich getMessages() anrufe, geht alles gut. Aber wenn ich nach einem postMessage() getMessages() aufrufen, wird keine GET-Anfrage gesendet.

Das sind meine Routen:

app.get('/api/message', function(req, res) { 
    Message.find({}).exec(function(err, result) { 
     res.send(result); 
    }); 
}); 

app.post('/api/message', function(req, res) { 
    console.log(req.body); 

    var message = new Message(req.body); 
    message.save(); 

    res.status(200).send('Message added'); 
}) 

Und das ist mein Winkelregler:

(function() { 
'use strict'; 

angular 
    .module('app') 
    .controller('MainController', mainController); 

function mainController(navigationFactory, $http, $timeout, apiFactory, $scope) { 

    var that = this; // jshint ignore: line 

    function init() { 
     that.getMessages(); 
    } 

    that.postMessage = function() { 

     apiFactory.postMessage(that.message).then(function() { 
      console.log('Posted from controller'); //gets logged 
      that.getMessages(); 
     }); 
     //that.getMessages(); <-- also tried this 

    } 

    that.getMessages = function() { 
     console.log('Getting from controller'); //gets logged 
     $http.get('http://localhost:5000/api/message').then(function(result) { 
       console.log(result.data); //Logs old result, without new message 
       that.messages = result.data; 
       console.log('Set data'); //gets logged 
     }); 
    } 

    init(); 

} 
})(); 

Und ich endlich eine Fabrik, um die Nachricht schreiben:

factory.postMessage = function(message) { 
     return $http.post('http://localhost:5000/api/message', {msg: message});  
} 

ich schon Ich habe eine ähnliche Frage gestellt, aber da es sich um ein anderes Problem handelt, dachte ich, ich werde es noch einmal fragen.

Warum gibt es keine HTTP-GET-Anfrage, obwohl getMessages() eindeutig in meiner postMessage() - Funktion aufgerufen wird. Ich kann sehen, dass getMessages() mit Hilfe von console.log() aufgerufen wird, aber es scheint zurückzukehren, bevor eine Anfrage gesendet wird.

+0

Erhalten Sie einen Konsolenfehler? –

+0

Keine Fehler, ich kann meine POST-Anfrage auf der Registerkarte Netzwerk mit Status 200 sehen, aber die GET-Anfrage wird nicht gesendet. (nur das erste Mal, wenn die Website gestartet wird) –

+0

Wirst du bitte versuchen, eine Geige zu erstellen? –

Antwort

1

Ich denke, dass Sie in ein Problem mit dem Hochfahren geraten, im Grunde eine Funktion aufrufen, die noch nicht deklariert wurde. Was passiert, wenn Sie versuchen, die Reihenfolge so zu ändern?

var that = this; // jshint ignore: line 

that.getMessages = function() { 
    console.log('Getting from controller'); //gets logged 
    $http.get('http://localhost:5000/api/message').then(function(result) { 
      console.log(result.data); //Logs old result, without new message 
      that.messages = result.data; 
      console.log('Set data'); //gets logged 
    }); 
} 

that.postMessage = function() { 

    apiFactory.postMessage(that.message).then(function() { 
     console.log('Posted from controller'); //gets logged 
     that.getMessages(); 
    }); 
    //that.getMessages(); <-- also tried this 

} 

function init() { 
    that.getMessages(); 
} 

init(); 

var functionName = function() {} vs function functionName() {}

EDIT:

Fest ich Ihre plunkr und es scheint ganz gut zu funktionieren!

Das Problem war, dass man nicht $http in Ihrem Controller Injektion ... Das warum ist Ihre GET-Anforderung nie

https://plnkr.co/edit/NyI1qa63NG8gFfuc45jj?p=preview

+0

Nizza zu fangen, leider hat sich nichts geändert, als ich versuchte, diese :( –

+0

Können Sie eine JSFiddle machen dann? –

+0

Ist es möglich, eine MEAN Anwendung mit jsfiddle zu schaffen? –

1

passiert Ich denke, die Ausgabe auf Server-Seite Versprechen ist, versuchen Sie diese mit .

app.get('/api/message', function(req, res) { 
    return Message.find({}).exec(function(err, result) { 
     if(err) { 
      return res.status(500).send(err); 
     } 
     return res.status(200).json(result); 
    }); 
}); 
+0

Habe noch nichts geändert, noch einmal: Mein Post und Get sind voll funktionsfähig. Ich bekomme keine Fehler. Das Problem liegt darin, dass, wenn mein factory.getMessages() aufgerufen wird, es sofort die alte Antwort zurückgibt, ohne sogar eine neue GET-Anfrage auszulösen. –

+0

Können Sie Ihren Bildschirm über Teamviewer teilen? –

+1

Ich habe das Problem herausgefunden ... In meinem eckigen Konfigurationsschritt habe ich aus irgendeinem Grund HTTP-Caching aktiviert. Ich habe das ausgeschaltet und das Problem war weg. Danke für Ihre Hilfe! –

Verwandte Themen