HTTP GET未被解雇

时间:2016-11-08 11:32:52

标签: angularjs node.js express asynchronous mean-stack

我正在尝试使用MongoDB,Angular,NODE.js和Express创建一个简单的留言板。

出于某种原因,我第一次调用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()的帮助下调用的,但它似乎在发出任何请求之前返回。

2 个答案:

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

编辑:

我修理了你的傻瓜,似乎工作得很好!

问题是您没有将$http注入您的控制器...... 这就是你的GET请求从未发生过的原因

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

答案 1 :(得分: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);
    });
});