2014-03-03 1 views
0

각도 js에서 Express.js api로 $ http pst ajax 호출이 있습니다. Express.js 부분에서는 노드의 비동기 모듈을 사용하여 코드의 일부 직렬 실행을 수행합니다. 특정 페이지로 리디렉션 할 문제가없는 경우 내가 res.render ('url')를 사용하면 각도에서 아약스 호출을하고 있기 때문에 이것은 대신 페이지를 리다이 렉팅하지 않고 angularjs에 경고합니다. BTW 나는 각도에 $ routeProvider도 가지고 :). 즉, 각 AJAX POST 호출Angularjs Express.Js 리다이렉션 각도 Ajax 호출 문제

코드 후 리디렉션 부분 템플릿을로드하는 것입니다

app.controller('MainCtrl',function($scope,$http){ 
    $scope.loginForm=function(){ 
     alert($scope.username); 
     $http.post('/login',{'name': $scope.username}). 
     success(function(data) { 
      alert(data); 
     }). 
     error(function(data) { 
      alert(data); 
     }); 
    } 
}); 

Node.js를 (Express.js)의 유효성을 검사하고 리디렉션을

app.post를 만들기 위해 API ('/ 로그인 ', function (req, res) {

var name= req.body.name; 
//var password= req.body.password; 
async.series([ 
    function (callback){ 
     var query= client.query('select count(*) as lgResult from Login where Email='+'"'+req.body.name+'"',function(err,result,field){ 
      if(err) return callback(err); 
      if(result[0]['lgResult'] === 0){ 
       res.send('passwordWrong'); 
      } 
      if(result[0]['lgResult'] === 1){ 
       callback(null, 'one'); 
      } 

     }); 

    }, 
    function (callback){ 
     var query= client.query('select count(*) as lgResult from Login where Email='+'"'+req.body.name+'"',function(err,result,field){ 
      if(err) return callback(err); 
      if(result[0]['lgResult'] === 0){ 
       res.send('passwordWrongSecondtime'); 
      } 
      if(result[0]['lgResult'] === 1){ 
       callback(null, 'two'); 
      } 
     }); 
    }], 
    function (err,results){ 
     if(err) { 
      console.log(err); 
      res.send('Something Broke sorry'); 
     } 
     else{ 
      res.render('employelogin/employlogin'); 
     } 
    }); 

}); 여기 내 실수

+0

오류를 받으셨습니까? 그들은 무엇인가? –

+0

리디렉션 대신 오류가 발생하지 않습니다. 내 각도 js 측면에서 경고를 받고 있습니다. – Madhu

+0

@EliranMalka Atlast가 작동하는 방법을 찾았습니다. 가장 좋은 방법인지 확실하지 않습니다. res.contentType ('application/html'); var data = 'emplogin/empr/:'+ results; res.header ('Content-Length', data.length); res.end (data); Angularjs 측에서 사용할 수 있습니다 $ windows.location = data; – Madhu

답변

1

그냥 하나 개의 HTTP 요청에서 모든 것을 처리하려고하지 않는 무엇

각도 라우팅 :

app.config(function($routeProvider, $controllerProvider,$compileProvider){ 
app.registerCtrl = $controllerProvider.register; 
    app.compileProvider = $compileProvider.directive; 
     $routeProvider 
     .when('/employeeTimeSheet',{ 
      controller:'MainCtrl', 
      templateUrl:'employeeTimeSheet.html' 
     }) 
     .when('/employeeLogin',{ 
      templateUrl:'employeeDashboard.html' 
     }) 
     .otherwise({redirectTo:'/employeeLogin'}); 

}); 

.

  1. 익스프레스 앱에서는 res.send (200, 'ok'); (또는 비슷한) res.render() 대신; 이렇게하면 Angular가 .success() 콜백을 실행합니다.
  2. res.send ('Something broke')는 기본적으로 200 HTTP 코드를 전송하므로 Angular의 성공 콜백을 트리거하므로 응답에 오류 상태 코드를 추가하십시오. 예 : res.send (500, 'Something broke'); 이 경우 Angular는 .error 콜백을 실행합니다.
  3. 각도 성공 콜백은 원하는 페이지로 리디렉션하고 Angular는 서버에서 어떤 뷰를 요청할지 결정합니다. (힌트 : $ 위치 서비스는 매우 도움이 여기 http://docs.angularjs.org/guide/dev_guide.services $ 위치.)

성공 콜백이 리디렉션 처리 할

$location.path('/employeeTimeSheet'); 

사용합니다. 그리고 $ 위치 서비스를 컨트롤러에 주입하는 것을 잊지 마십시오.

+0

귀하의 아이디어가 효과가 있습니다! 그러나 내가 원하는 다른 것이 있습니다 ... 전체 페이지가 다른 페이지로 리디렉션되고 익스프레스에서 몇 가지 결과가 나타나면 페이지에 인쇄해야합니다. 새 직원 대시 보드 페이지가 리디렉션되어야하는 곳이라고 가정 해보십시오. 표시해야하는 새 템플릿 디자인이 있습니다. – Madhu

+0

res.redirect ('/ path/to/new/page'); 그 일을 할거야? 이렇게하면 전체 앱이 새로운 위치로 리디렉션됩니다. 그 후에는 http://app.com/ http://app.com/path/to/new/page가됩니다. –

+0

res.redirect를 사용하면 콘솔에 표시됩니다. 302 일시적으로 이동 31ms – Madhu