【问题标题】:HTTP GET not being firedHTTP GET 没有被触发
【发布时间】:2016-11-08 11:32:51
【问题描述】:

我正在尝试使用 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 请求,即使 getMessages() 显然在我的 postMessage() 函数中被调用。我可以看到 getMessages() 是在 console.log() 的帮助下被调用的,但它似乎在发出任何请求之前就返回了。

【问题讨论】:

  • 您是否收到任何控制台错误?
  • 完全没有错误,我可以在网络选项卡中看到我的 POST 请求,状态为 200,但没有发送 GET 请求。 (仅在网站第一次启动时)
  • 请您尝试制作小提琴好吗?
  • 'Posted from controller' 登录控制台?
  • 是的,我尝试添加大量的 console.log(),一切都在运行:postMessage() 到达 .then 语句 --> getMessages() 在请求之前和请求之后记录控制台。即使在 .then() 内部,我也可以执行 console.log(result.data);它会向我发送数据,但它是一个旧列表,没有新消息

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


【解决方案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);
    });
});

【讨论】:

  • 仍然没有改变任何东西,再一次:我的帖子和获取功能齐全。我没有错误。问题在于,当我的 factory.getMessages() 被调用时,它会立即返回旧响应,甚至不会触发新的 GET 请求。
  • 你能通过teamviewer分享你的屏幕吗?
  • 我发现了问题......在我的角度配置阶段,出于某种原因,我启用了 http 缓存。我把它关掉了,问题就消失了。感谢您的帮助!
【解决方案2】:

我认为您可能遇到了提升问题,基本上是调用尚未声明的函数。如果您尝试这样更改顺序会发生什么?

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

【讨论】:

  • 很好,不幸的是,当我尝试这个时没有任何改变:(
  • 那你能做一个JSFiddle吗?
  • 是否可以使用 jsfiddle 创建 MEAN 应用程序?
  • 如果你尝试在 getMessages 函数中添加一个“return”,比如return $http.get...
  • 我会尝试创建一个 jsfiddle.. 但你看到的基本上是我所有相关的角度代码。通常我的 getMessages 也位于 apiFactory 中,但我将它添加到控制器中,因此帖子不会太长。向函数添加返回并没有改变任何东西......我已经尝试了很多不同的方法来做到这一点并阅读了许多关于承诺的文章,但是 HTTP Get 请求永远不会发送,即使使用手动触发 getMessages() 函数也是如此按钮。 GET 请求实际上只在我刷新网站时发送
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 2012-06-03
  • 2019-11-07
  • 2018-09-01
  • 2018-12-03
  • 2021-04-23
相关资源
最近更新 更多