2016-11-08 131 views
0

我正在嘗試用MongoDB,Angular,NODE.js和Express創建一個簡單的留言板。HTTP GET沒有被解僱

出於某種原因,我第一次調用getMessages()一切都很順利。 但是,當我在postMessage()之後調用getMessages()時,沒有發送GET請求。

這是我的路線:

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

,這是我的角度控制器:

(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(); 

} 
})(); 

最後我用一個工廠張貼訊息:

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

我已經開了一個類似的問題,但由於這是一個不同的問題,我想我會再問一次。

爲什麼沒有HTTP GET請求,即使在我的postMessage()函數中明確地調用了getMessages()。我可以看到getMessages()在console.log()的幫助下被調用,但它似乎在發送任何請求之前返回。

+0

您是否收到任何控制檯錯誤? –

+0

完全沒有錯誤,我可以在網絡選項卡中看到我的POST請求,狀態爲200,但GET請求未被髮送。 (僅在網站首次推出時) –

+0

請您嘗試製作小提琴嗎? –

回答

1

我想你可能會遇到一個懸掛問題,基本上調用一個尚未聲明的函數。如果你嘗試改變這樣的順序會發生什麼?

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() {}

編輯:

我搞掂你plunkr,它似乎工作得很好!

的問題是,你沒有注射$http到控制器中...... 這就是爲什麼你的GET請求,從來沒有發生過

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

+0

很好的捕獲,不幸的是沒有改變,當我嘗試這個:( –

+0

你可以做一個JSFiddle然後? –

+0

是否有可能創建一個MEAN應用程序與jsfiddle –

1

我認爲,問題是在服務器方的約定,請嘗試使用此。

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

仍然沒有改變任何東西,再次:我的帖子和獲得功能齊全。我沒有得到任何錯誤。問題在於,當我的factory.getMessages()被調用時,它立即返回舊的響應,甚至沒有觸發新的GET請求。 –

+0

你能通過teamviewer分享你的屏幕嗎? –

+1

我想出了問題......在我的角度配置階段,由於某種原因,我啓用了http緩存。我解決了這個問題,問題沒有了。謝謝你的幫助! –