티스토리 뷰
반응형
아아.. 블로그 포스팅을 할 건 많은거 같은데 회사 일이 바쁘다 보니 자꾸만 밀린다 ㅜㅜ..- 이건 API 서버 개발하다가 정말 유용하게 쓰고 있는 API 서버의 에러를 텔레그램 봇으로 받는 구현체 예제입니다.
- API 서버의 환경은 다음과 같습니다
- Node.js
7.x
- Express.js
- ECMA2016
- Node.js
- 텔레그램 봇이 급하신 분들은
errorHandler.js
만 보세요. - 테스트로 사용한 전체 소스코드는 Gist 를 참고 바랍니다.
선 스크린샷, 후 코드
서버 로그를 계속 쳐다보고 있을 수가 없으니 에러 발생시 Notifiable 하게 하면 편하다.
구현체
Server.js
;;const app = ;// 높은 Unit Testability 를 가져가기 위해 Express Route 내에서 특별한 로직을 처리하지 않고 실제 로직은 occurError() 와 같이 모듈로 빼서 리턴 값만 사용합니다.app;app;
occurError.js
;{// numberParameter가 Number로 parseInt 되지 않을 때 에러를 발생시켰습니다.if !throw 403 'PARAMETER_TYPE_EXCEPTION' 'numberParameter is require Number'; // HttpError.jsreturn 'This is Good Statement';};
HttpError.js
// Error Class를 상속받는 HttpError Class를 정의합니다. HTTP 통신에 필요한 Status Code와 추가적인 데이터를 전달하기 위함입니다.{super;// 저는 가끔 귀찮을 때 throw new HttpError(null, null, 'Hmm..') 과 같이 사용할 때가 있습니다. 이를 위한 OR 연산입니다.thisstatus = status || 500;thiscode = code || 'UNEXPECTED_ERROR';thismessage = message || 'What the Unexpected Error?!?!';}
errorHandler.js
;const TOKEN = '11111:TelegramBotToken';// 텔레그램 @BotFather 로 생성한 봇의 TOKEN이 필요합니다.const TELEGRAM_BOT_URL = `https://api.telegram.org/bot/sendMessage`;// 텔레그램 봇으로 sendMessage 기능을 수행할 수 있는 URL 입니다.// 텔레그램 봇 API에 대한 자세한 내용은 https://core.telegram.org/bots/api 을 참고하세요.// npm에 node-telegram-bot-api 와 같이 추상화된 모듈도 있습니다.// https://www.npmjs.com/package/node-telegram-bot-apiconst CHAT_ID = 123456789;// 메시지를 보낼 채팅창의 chat_id 입니다. 채팅창의 chat_id 를 얻는 방법은 여기서 언급하지 않겠습니다.// 저는 몇 대의 봇과 다수의 chat_id 을 기능별로 DB로 관리하고 있습니다.// TOKEN, CHAT_ID 와 같은 상수를 process.env.NODE_ENV 별로 관리하고 싶다면 getconfig 와 같은 것을 사용하면 좋습니다.{// HttpError Class 에서 정의한 status, code, message을 errorHandler에서 다시 정의하는 이유는 HttpError 객체로 Customize하게 잡히지 않는 Exception Error들 까지 포괄하여 처리할 수 있게하기 위함입니다. (ex. Syntax Error)const status = errorstatus || 500;const code = errorcode || 'UNEXPECTED_ERROR';const message = errormessage || error;// 특정 Http Status Code 에서만 텔레그램 봇 활성화if 500 403 401 >= 0const text = `Occur Error..!\n\n- IP: \n- URI: \n- HEADERS: \n- BODY: \n\n- STATUS: \n- CODE: \n- STACK: `;// TELEGRAM_BOT_URL 로 fetch 하는 부분은 동기로 돌아갈 필요가 없습니다. 성공이건 실패건 response.send() 는 실행되어야 하며, 연관되지 않습니다.;responsestatusstatus;}
반응형
'개인공부 > Node.js' 카테고리의 다른 글
[node.js] Request 유효값 검사 모듈 express-vaildator 에 대해.. (0) | 2016.07.28 |
---|---|
[node.js] express.js 라우트 요청 객체(req), 응답 객체(res) 정리 (0) | 2016.07.21 |