簡體   English   中英

在MEAN app中獲取404 Not PUT請求

[英]Get 404 Not Found with PUT request in MEAN app

我的事件詳細信息頁面上有一個“編輯”按鈕,該按鈕將轉到新頁面,用戶可以在該頁面上更新當前所選事件。 我使用GET獲取單個/所有事件和POST來創建新事件沒有任何問題。 但我堅持更新現有事件並不斷得到404錯誤:PUT http:// localhost:3000 / api / events 404(Not Found)在我的服務器路由上,我有:

 //return event-details app.get('/api/events/:id', events.getEventById); //update event app.put('/api/events/:id', events.updateCurrentEvent); 

服務器端事件控制器:

 exports.updateCurrentEvent = function(req, res) { Event.findById(req.params.id, req.body, function(err, event) { var event = req.body; if(!event) { res.statusCode = 404; res.send({ error: 'Not found'}); } event.title = req.body.title; event.desc = req.body.desc; event.date = req.body.date; event.duration = req.body.duration; event.address = req.body.address; event.city = req.body.city; event.state = req.body.state; event.save(function (err) { if (!err) { log.info("event updated"); res.send({ status: 'OK', event:event }); } else { if(err.name == 'ValidationError') { res.statusCode = 400; res.send({ error: 'Validation error' }); } else { res.statusCode = 500; res.send({ error: 'Server error' }); } log.error('Internal error(%d): %s',res.statusCode,err.message); } }); }); 

我的$資源服務:

 app.factory('mvEvent', function($resource) { var EventResource = $resource('/api/events/:_id', {_id: "@id"}, { update: {method:'PUT', isArray:false} }); return EventResource; }); 

我的客戶端控制器:

 angular.module('app').controller('mvUpdateEventCtrl', function($scope, $routeParams, $location, mvEvent) { $scope.event = mvEvent.get({_id:$routeParams.id}) .$promise .then(function(event) { $scope.event = event; console.log($scope.event); $scope.title =$scope.event.title; $scope.desc = $scope.event.desc; $scope.date = $scope.event.date; $scope.duration = $scope.event.duration; $scope.address = $scope.event.address; $scope.city = $scope.event.city; $scope.state = $scope.event.state; }); $scope.updateEvent = function() { $scope.event.$update(function() { }, function(error) { $scope.error = error.data.message; }); } }); 
我的客戶端路線:

 var app = angular.module('app', ['ngResource', 'ngRoute', 'ui.bootstrap']); app.config(function($routeProvider, $locationProvider){ $locationProvider.html5Mode(true); $routeProvider //events route .when('/events', { templateUrl: '/partials/events/event-list', controller: 'mvEventListCtrl' }) //events detail route .when('/events/:id', { templateUrl: '/partials/events/event-details', controller: 'mvEventDetailsCtrl' }) //update event route .when('/events/:id/update', { templateUrl: '/partials/admin/event-update', controller: 'mvUpdateEventCtrl' }) }); 

獲取每個文本字段中顯示的事件詳細信息是我能得到的。 一旦我點擊“更新事件”按鈕,我就會收到404錯誤,它似乎位於我的服務器端代碼中。 我已經看到了很多不同的方法來實現PUT請求,有或沒有routeParams,使用findById然后save或findByIdAndUpdate。 我想知道是否有一種標准的方法來做到這一點。 提前致謝!!

刪除行var event = req.body; 從您的服務器端控制器。 首先,它不是必需的。 其次,它與Event.findById回調返回的文檔的名稱相同,並且被變量聲明覆蓋。

 exports.updateCurrentEvent = function(req, res) {

     Event.findById(req.params.id, req.body, function(err, event) {

        var event = req.body;  // <<==== Remove this line

        if(!event) {
            res.statusCode = 404;
            res.send({ error: 'Not found'});
        }

        event.title = req.body.title;
        event.desc = req.body.desc;
        event.date = req.body.date;
        event.duration = req.body.duration;
        event.address = req.body.address;
        event.city = req.body.city;
        event.state = req.body.state;

        event.save(function (err) {
            if (!err) {
                log.info("event updated");
                res.send({ status: 'OK', event:event });
            } else {
                if(err.name == 'ValidationError') {
                    res.statusCode = 400;
                    res.send({ error: 'Validation error' });
                } else {
                    res.statusCode = 500;
                    res.send({ error: 'Server error' });
                }
                log.error('Internal error(%d): %s',res.statusCode,err.message);
            }
        });
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM