2014-01-18 1 views
11

express와 함께 node.js를 실행 중입니다. 나는 당신이 http://bla.com/module_name/method_name 에 갈 때 그 안에 방법을 가진 노드 모듈을 썼다.express가있는 node.js의 정의되지 않은 변수에 오류가 발생하지 않습니다.

app.all("*", resSetup, controller, render); 

와 컨트롤러 경로에 따라 메소드를 호출 할 것입니다 :

방법은 다음과 같이 무언가를

exports.method_name(req, res, next); 

내 주요 응용 프로그램의 전형적인 스타일을 따른다.

메서드에 정의되지 않은 변수 오류가있는 경우 express가 그냥 멈추고 오류가 발생하지 않는 것 같습니다. 콘솔 로그에도 아무 것도 나타나지 않습니다. 전후에 콘솔 메시지를 넣을 수 있습니다. 오류가 발생한 위치와 그 전의 메시지가 로그에 나타나고 이후에는 나타나지 않습니다.

나는 시도/캐치를 감아이를 얻을 수 있습니다 :

[ReferenceError: blabla is not defined] 

하지만 줄 번호 또는 아무것도.

내 생각에 express는 오류가 발생하는 것을 어떻게 든 방지합니다. 내가 직접 경로에있는 "컨트롤러"라는 함수에 오류를 넣으면 오류를 올바르게 표시합니다. 그것은 너무 많이 중요하지만, 여기에 코드를 내가 일하고있다하지 않을 수 있습니다

: 메서드 호출이 발생하는 경우

https://github.com/RobKohr/quick-site/blob/master/index.js

라인 189입니다.

+1

인가 거기에 스택 속성을 참조 오류에 사용할 수 있습니까? –

+1

나는 훌륭한 노드/표현력 개발자가 아니므로 소금 한알을 가져 가라. 관찰 만하면된다. 165 행에서 C를 선언하는 것처럼 보이지만 189 행에서 어떻게 사용 가능한지 잘 모르겠습니다.익스프레스가 멈추는 오류는 콜백을 처리하는 데 실패 할 수 있습니다. 아마도 캐치에서 try catch와 next (err)를 사용하십시오. –

답변

0
  1. 익스프레스는 노드 비동기 성질에 크게 의존합니다. 내가 이것을 유지한다면 30 줄에 던져지는 오류를 보게되면 저에게 기운이 떨어질 것입니다. 다음 (err) 패턴 만 사용하도록 코드를 리팩토링하십시오.

  2. 응답하지 않는 이유는 Express가 HTTP 응답 (예 : res.send())을 완료하지 못했기 때문입니다. 즉, 오류가 호출 스택 위로 버블 링되지만 Express 미들웨어 파이프 라인으로 리디렉션되지 않는 배관 연결이 끊어 졌음을 의미합니다. 오류로 인해 호출되는지 확인하려면 일부 error middleware을 등록하십시오. Ruairi의 의견에

1

건물의 위, 나는 'Q'(https://github.com/kriskowal/q)과 약속 Express를 사용하는 경우이 같은 문제가 있었다 - 놀았어요 노드를 오류가 발생하지 않았다. 나는 오류를보고 콘솔에 인쇄 할 수 있었다 '콜백'체인 약속의 끝에 캐치를 추가함으로써

코드는처럼 보이는 끝 :

export function index(req, res) { 

    //Create the 'promise' 
    var request = req.body; 
    var queryJobID = req.query.jobId; 
    console.log('queryJobID: ' + queryJobID); 
    var jobStatusPromsie = jobManager.job.getStatus(queryJobID); 

    Q.all([jobStatusPromsie]) 
    .then(
     function (result) { 
      var responseData = {}; 
      console.log('Job Status Response received'); 
      if (result != null) { 
       //Without the .catch below an error here will be 'silent' 
       console.log('jobStatus result: ' + util.inspect(result, false, null)); 
       responseData['status'] = 'OK'; 
       responseData['progress'] = result.progress; 
       res.json(responseData); 
      } else { 
       console.log('jobStatus Error'); 
       responseData['status'] = 'Error'; 
      } 
      res.json(responseData); 
      console.log('jobStatus Response data sent'); 
     }, 
     function (error) { 
      console.log('Error while getting job status:', error); 
      res.json("Error"); 
     }) 
    .catch(function(err) { 
     //handle errors 
     console.log('Promise error while getting job status:', err); 
    }); 
} 
관련 문제