【问题标题】:Restangular put() yielding a 404 when updating from a form从表单更新时,Restangular put() 产生 404
【发布时间】:2014-06-13 06:51:01
【问题描述】:

Restangular 在发送 PUT 请求时一直向我抛出 404,我不知道为什么。

我有一个事件集合,我得到一个事件并在一个表单中更新它。

根据Restangular docs,当我对事件发出PUT请求时,它应该路由到api/events/:eventId。相反,我收到一条错误消息,说它正在路由到api/events

错误:

PUT http://localhost:9000/api/events 404 (Not Found) 

你能看出我哪里出错了吗?我根本没有更改 Restangular 上的配置。

这是我的控制器:

var restEvent = Restangular.one("api/events", $routeParams.eventId);

restEvent.get().then(function(eventData) {
  // the eventData is successfully coming through
  $scope.thisEvent = Restangular.copy(eventData);

  // $scope.thisEvent is modified in the form

  // updateEvent() runs when my Event form is submitted
  $scope.updateEvent = function() {
    $scope.thisEvent.put();
  };
});

这是我的 Express 更新路线:

// update route -------------
app.route('/api/events/:event_id')
  .get(events.show)
  .put(events.updateEvent);

有什么建议吗?

【问题讨论】:

    标签: node.js angularjs express restangular


    【解决方案1】:

    这实际上是 Restangular/Mongo 的问题。 Restangular 默认主键为“id”,而 Mongo 使用“_id”。当 Restangular 尝试将 Event 对象中的“id”附加到 api/events 时,它找不到“id”并且只能路由到 api/events

    这是Restangular docs 建议的代码,可以解决这个问题:

    app.config(function(RestangularProvider) {
        RestangularProvider.setRestangularFields({
          id: "_id"
        });
    });
    

    【讨论】:

      【解决方案2】:

      这可能是浏览器的问题,我建议为 PUT 和 PATCH 进行此操作:

        app.config(function(RestangularProvider) {
          RestangularProvider.setMethodOverriders(['put', 'patch']);
        });
      

      【讨论】:

      • 这并不是答案,但它在文档中为我指明了正确的方向。谢谢!
      猜你喜欢
      • 2014-09-23
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多