2016-01-31 65 views
1

我目前有一個MEAN堆棧項目,並且正在嘗試獲取用於更新工作的路由。保存工作正常。Express js路由更新問題

基本上在我的角度控制器我有以下範圍的方法,其中staff是形式發送的對象提交:

$scope.updateStaff = function(staff) { 
    $scope.submitted = true; 

    if (form.$valid) { 
     staffActionService.update({ id: staff._id }, staff) 
     .then(function() { 
      $scope.success = true; 
      console.log("successful"); 
     }) 
     .catch(function (err) { 
      var err = err.data; 
      $scope.errors = {}; 
      angular.forEach(err.errors, function (error, field) { 
       form[field].$setValidity('mongoose', false); 
       $scope.errors[field] = error.message; 
      }); 
     }); 
    } 
} 

另外,我有一個工廠的方法,其基本上沒有所述客戶端側使用$resource路由:

angular.module('xxx') 
    .factory('staffActionService', function ($resource) { 
     return $resource('/api/staffs/:id/:controller', 
      { id: '@_id' }, 
      { 'update': { method:'PUT' } } 
     ); 
    }); 
}); 

我的服務器端路由的設置如下

var express = require('express'); 
var controller = require('./staff.controller'); 

var router = express.Router(); 

router.get('/', controller.index); 
router.get('/:id', controller.show); 
router.post('/', controller.create); 
router.put('/:id/staff', controller.update); 
router.patch('/:id', controller.update); 
router.delete('/:id', controller.destroy); 

module.exports = router; 

但由於某些原因,我的服務器端沒有被擊中

任何想法,曾試圖與路由,但沒有喜悅的幾件事

乾杯

回答

0

看起來你的呼籲PATCH路線法,但在客戶端使用PUT方法,這將導致404

您可以通過以下三種方式之一解決這個問題:

您可以通過牛逼修復快遞他把路線來響應「/:身份證」:

router.get('/', controller.index); 
router.get('/:id', controller.show); 
router.post('/', controller.create); 
router.put('/:id/staff', controller.update); 
router.put('/:id', controller.update); // add this 
router.patch('/:id', controller.update); 
router.delete('/:id', controller.destroy); 

module.exports = router; 

或者您也可以通過定義修復它在你的角度控制器:從$資源工廠「控制器」您設置:

staffActionService.update({ id: staff._id, controller: 'staff' }, staff) 

或者您也可以通過改變方法的補丁來修復它在$資源工廠:

angular.module('xxx') 
    .factory('staffActionService', function ($resource) { 
    return $resource('/api/staffs/:id/:controller', { id: '@_id' }, {'update': {method:'PATCH'}}) 
    }); 

注:不結合上面的例子中,只用一個!

+0

嗨最終嘗試過,但仍然得到錯誤staffActionService.update不是一個函數。看着網絡流量,它似乎甚至沒有發現客戶端的服務器方法失敗 – tjhack