2014-01-27 6 views
1

Node.js 오류 스택에 대한 정보를 찾고 있는데 레이어가 누락 된 것 같습니다. Mongo 데이터베이스에서 사용자를 찾을 수없는 경우 오류가 발생합니다. 우리는 몽구스를 ODM으로 사용하고 있습니다. 오류 관리는 매우 간단합니다. 몽구스 호출이 다시 빈 상태가되면 새로운 오류 객체를 만듭니다. 우리는 Winston을 사용하여 로그를 남기고 스택 추적과 함께 오류를 기록합니다. 하지만 우리는 정보가 누락 된 것 같습니다. 오류가 발생하는 아래 코드에서 "/var/app/current/models/users_model.js:19:9"행을 볼 수 있습니다. 문제는 Mongoose 콜에 잔뜩 묻혀서 실제로 모듈 중 어떤 모듈이 호출되었는지를 보여주지 않습니다. 이것이 정상적인 것인지, 아니면 그것이 몽구스 약속의 사슬에 갇혀서 필요한 정보인지 잘 모르겠다. 어떤 생각이나 정보라도 크게 감사 할 것입니다.Node.js 스택 추적 정보

"message": "사용자 정의 _FOUND \", \ "스택 \": \ "오류 : USER_NOT_FOUND \ n _e (/var/app/current/global/response.js) : 69 : 11) \ n Promise에서. (/var/app/current/models/users_model.js:19:9) 약속에서. Promise.EventEmitter.emit (events.js : 95 : 17) \ n Promise.emit (/var/app/current/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8) Promise.fulfill (/ var/app/current/node_modules/mongoose/node_modules /mpromise/lib/promise.js:79:38) .js : 92 : 20) \ n /var/app/current/node_modules/mongoose/lib/query.js:1784:30\n /var/app/current/node_modules/mongoose/lib/utils.js :/var/app/current/node_modules/mongoose/node_modules/mongodb/lib/mongodb/collection.js:953:5\n의/var/lib/mongodb/cursor.js : 683 : 35 \ "}"

답변

1

나는 두 가지를 마침내 발견했다. 하나는 "longjohn"이라는 npm 모듈이었습니다. 여러 비동기 호출에서 스택 추적을 수집합니다. 내 server.js 파일의 상단에 추가 :

require('longjohn').async_trace_limit = 500; 

그러나 개별 스택 추적의 길이는 여전히 너무 짧습니다. 그래서 노드를 시작했습니다 :

node --stack-trace-limit=500 server.js 

이 다음 몬스터 스택 추적을했지만, 내가 원하는 정보를 포함하고있었습니다. 확실히 프로덕션 환경에 추가 될 것은 없지만 dev에서 디버깅을하기에 좋습니다.

일부 변수를 수집하고이를 버리는 방법이 있다면 정말 좋을 것입니다. 우리가 이해하려고하는 실제 문제는 응답이 비어있는 이유입니다. 이는 유효하지 않은 데이터가 전달되고 있음을 의미합니다. 그러나 스택 추적에서이를 볼 수 없습니다.

2

이것은 정상입니다. Node.js의 데이터베이스 호출은 (일반적으로) 비동기식이므로 스택 추적의 맨 위가 데이터베이스에서 돌아 오는 데이터를 나타내는 이벤트가됩니다. 그 요청을하게 된 스택은 그 시점에서 완료되므로, 찾고있는 정보는 없어집니다.