Express+Angular更新路由:错误:无法PUT



我正在尝试使用表单更新模式,然而,在app.put和app.post(我认为这是一个可能的解决方案)上,我都得到了

PUT https://myapp-demo.herokuapp.com/api/events/5523da4d97c5000300f6e713 404 (Not Found)

和来自ajax回调的错误

Error: Cannot PUT /api/events/5523da4d97c5000300f6e713

在客户端,我提出这个请求:

$scope.saveEvent = function(id) {
  $http.put('../api/events/' + id, $scope.formData)
          .success(function (data) {
              $scope.events = data;
          })
          .error(function(data) {
              console.log('Error: ' + data);
          })
};

在快递路线上,我这样做:

app.put('../api/events/:id', function (req, res){
    var user = req.user;
    var id = req.params.id;
    var update = {
        $set: {
                title: req.body.title,
                description: req.body.description,
              }
    };
        Event.findByIdAndUpdate(id, update, function (err, event) {
            if(!event) {
                res.statusCode = 404;
                return res.send({ error: 'Not found' });
            }
            console.log("event updated");
            Event.find(function(err, events) {
               if (err){
                  res.send(err)
              };
               res.json(events);
            });
        });
});

我试图通过这次活动_id的不同之处在于,通过使用req.params.id并以类似req.body.id的形式传递id,所有这些都会得到相同的结果。我还读过关于创建隐藏输入以帮助方法重写表单方法的文章。然而,这样做并没有帮助。

<input type="hidden" name="_method" value="put">
<md-button class="md-raised md-primary" ng-click="saveEvent(eventId)">Save</md-button>

更新

事实上,最初的问题是在我的看跌路线上。我现在发现了一个新问题。当我再次尝试更新时,我得到了

Error:  Object {error: "Not found"}

即使在刷新页面或重新启动服务器之后,也会发生这种情况。

以下内容无效:

app.put('../api/events/:id'...

它需要引用命名空间,或者在您的情况下引用根:

app.put('/api/events/:id'...

最新更新