2013-10-10 3 views
1

У меня есть REST API, который считывает/сохраняет данные из базы данных MongoDB. Приложение, которое я использую, извлекает форму и создает из нее объект (работу), а затем сохраняет его в БД. После формы у меня есть кнопка, которая вызывает событие, запускает функцию сохранения моего контроллера, а затем перенаправляет на другой URL-адрес.Перенаправление AngularJS после ng-click

Как только я нажимаю на кнопку, я говорю, что работа хорошо добавлена ​​в БД, но приложение застряло, и перенаправление никогда не вызывается. Однако, если я перезагружу свое приложение, я вижу, что новое «задание» хорошо добавлено в БД. Что в этом плохого ??? Благодаря !

Вот мой код:

Пример HTML (нефрит) Код:

button.btn.btn-large.btn-primary(type='submit', ng:click="save()") Create 

контроллер углового модуля:

function myJobOfferListCtrl($scope, $location, myJobs) { 

    $scope.save = function() { 
     var newJob = new myJobs($scope.job); 
     newJob.$save(function(err) { 
      if(err) 
       console.log('Impossible to create new job'); 
      else { 
       console.log('Ready to redirect'); 
       $location.path('/offers'); 
      } 
     });  
    };  
} 

Конфигурация углового модуля:

var myApp = angular.module('appProfile', ['ngResource']); 

myApp.factory('myJobs',['$resource', function($resource) { 
    return $resource('/api/allMyPostedJobs', 
      {}, 
      { 
       save: { 
        method: 'POST' 
       } 
      }); 
}]); 

Маршрутизация в моем nodejs применения:

app.post('/job', pass.ensureAuthenticated, jobOffers_routes.create); 

И, наконец, контроллер моего REST API:

exports.create = function(req, res) { 
    var user = req.user; 
    var job = new Job({ user: user, 
         title: req.body.title, 
         description: req.body.description, 
         salary: req.body.salary, 
         dueDate: new Date(req.body.dueDate), 
         category: req.body.category}); 
    job.save(function(err) { 
     if(err) { 
      console.log(err); 
      res.redirect('/home'); 
     } 
     else { 
      console.log('New job for user: ' + user.username + " has been posted."); //<--- Message displayed in the log  
      //res.redirect('/offers'); //<---- triggered but never render 
      res.send(JSON.stringify(job)); 
     } 
    }); 
}; 
+0

Является ли POST для конечной точки «job» (vs api/allMyPostedJobs) когда-либо называемой? Если нет, то я не уверен, как ваш код даже ничего экономит для db. – angulord

+0

Да, у меня это в журнале: Опубликована новая работа для пользователя XXX. И, кроме того, сообщение находится в БД при перезапуске серверного приложения ... – GuillaumeA

+0

Просто чтобы очистить, журнал не отображает сообщение «Готов к перенаправлению», которое может произойти непосредственно перед перенаправлением $ location.path() , – GuillaumeA

ответ

3

я, наконец, нашел решение! Вопрос был где-то 18inches за экраном ....

Я изменил угловой контроллер приложения, как это:

$scope.save = function() { 
     var newJob = new myJobs($scope.job); 
     newJob.$save(function(job) { 
      if(!job) { 
       $log.log('Impossible to create new job'); 
      } 
      else { 
       $window.location.href = '/offers'; 
      } 
     }); 
    };  

Хитрость заключается в том, что мой REST API возвратил созданную работу в качестве объекта JSON, и я имел дело с этим, как с ошибкой! Поэтому каждый раз, когда я создавал объект задания, мне возвращался объект json, и поскольку он был не равен нулю, сообщение журнала было вызвано, и я никогда не перенаправлялся. Кроме того, теперь я использую свойство $window.location.href для полной перезагрузки страницы.

Смежные вопросы