【问题标题】:$http PUT request is slow and unsuccessful no status code, no errors$http PUT 请求缓慢且不成功 无状态码,无错误
【发布时间】:2015-09-22 21:12:19
【问题描述】:

当用户提交表单时,服务器应该会收到更新 poll 数据库的 PUT 请求。奇怪的是,在我的开发控制台中,我可以看到 Poll.update 的回调被立即调用,但 PUT 请求需要 120000 毫秒。然后即使开发控制台显示一个成功的 PUT 请求,数据库也没有更新,我的 .success 回调也永远不会被调用。

更新了 [object 对象]

PUT /api/polls/5599725069753a7711fd4274/0 200 120083ms

在我的浏览器中,我只看到一个没有状态码的 PUT 请求。我没有看到任何错误消息。

投票控制器的路由:

 var express = require('express');
 var controller = require('./poll.controller');
 var router = express.Router();

 router.put('/:id', controller.update);

 module.exports = router;

Mongoose Poll 控制器:

exports.update = function(req, res) { 
  var update = {$set: {'poll_name': 'Poll has been updated'}};

  Poll.update(req.params.id, update, function(err, num, doc) {
  if(err) console.log(err);
  else {
    console.log('Updated ' + doc); // This is logged after vote is submitted
    }
});
};

点击提交时调用的 Angular 代码:

$scope.addVote = function() {
  $http.put('api/polls/' + $scope._id).success(function(result) {
      console.log('Vote submitted'); //This is never called
    }
  );
};

【问题讨论】:

  • 你能在调用中添加错误函数,这样你就可以通过调试它来找出错误背后的原因.error(function(data, status, headers, config) { console.log('Vote submitted'); //This is never called } )
  • 如果你不调用 "res.end" 或者更好的 "res.json" 调用将永远不会关闭,实际上进入了 express 为调用设置的超时时间。

标签: javascript angularjs node.js mongodb mongoose


【解决方案1】:

您的服务器没有发送任何响应,这就是您看到请求在很长一段时间后结束的原因。在你的 console.log 之后添加 res.send,你会看到客户端收到的响应

【讨论】:

  • 是的。至少将 res.status(200) 或 res.status(201) 发送回客户端。否则,您的请求将超时。
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 2016-05-24
  • 2019-09-13
  • 2017-09-07
  • 1970-01-01
  • 2018-11-07
  • 2020-05-12
  • 1970-01-01
相关资源
最近更新 更多