이유혁

merged

Showing 1 changed file with 25 additions and 16 deletions
...@@ -29,11 +29,12 @@ app.get('/', (req, res) => { ...@@ -29,11 +29,12 @@ app.get('/', (req, res) => {
29 }); 29 });
30 30
31 // register a webhook handler with middleware 31 // register a webhook handler with middleware
32 -// about the middleware, please refer to doc
33 app.post('/webhook', line.middleware(line_channel), (req, res) => { 32 app.post('/webhook', line.middleware(line_channel), (req, res) => {
33 + // webhook post 요청에 대해 promises를 전체 수행한다.
34 + // 전체 수행은 순차수행이기 때문에 동기처리 필요 => async await 패턴을 사용한다
34 const promises = req.body.events.map(async (event) => { 35 const promises = req.body.events.map(async (event) => {
35 - let language_type = await language_detector(event); 36 + let api_connector = await api_connect(event);
36 - let options = await option_maker(language_type, event); 37 + let options = await option_maker(api_connector, event);
37 let result = await receive_result(options, event); 38 let result = await receive_result(options, event);
38 client.replyMessage(event.replyToken,result); 39 client.replyMessage(event.replyToken,result);
39 }) 40 })
...@@ -46,24 +47,28 @@ app.post('/webhook', line.middleware(line_channel), (req, res) => { ...@@ -46,24 +47,28 @@ app.post('/webhook', line.middleware(line_channel), (req, res) => {
46 }); 47 });
47 }); 48 });
48 49
49 -const language_detector = (event) => { 50 +// 이벤트 타입 검사 이후
50 - if (event.type !== 'message' || event.message.type !== 'text') { 51 +// language detector api url 및 client id, secret 을 담은 connector를 반환한다.
51 - // ignore non-text-message event 52 +const api_connect = (event) => {
52 - return reject(new Error('메세지 혹은, 텍스트가 아닙니다.')); 53 + return new Promise((resolve, reject) => {
53 - } 54 + if (event.type !== 'message' || event.message.type !== 'text'){
54 - return new Promise((resolve) => {
55 //언어 감지 option 55 //언어 감지 option
56 - resolve({ 56 + resolve({
57 - url : languagedetect_api_url, 57 + url : languagedetect_api_url,
58 - form : {'query': event.message.text}, 58 + form : {'query': event.message.text},
59 - headers: {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret} 59 + headers: {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret}
60 - }); 60 + });
61 + } else {
62 + reject(new Error('메세지 혹은, 텍스트가 아닙니다.'));
63 + }
61 }) 64 })
62 } 65 }
63 66
64 -const option_maker = (language_type, event) => { 67 +// post 요청으로 api connector를 이용해 language를 분석한 뒤
68 +// source 및 target 설정, 번역 API url을 포함한 options을 반환한다
69 +const option_maker = (api_connector, event) => {
65 return new Promise((resolve, reject) => { 70 return new Promise((resolve, reject) => {
66 - request.post(language_type, (error,response) => { 71 + request.post(api_connector, (error,response) => {
67 console.log(response.statusCode); 72 console.log(response.statusCode);
68 if(!error && response.statusCode == 200){ 73 if(!error && response.statusCode == 200){
69 let detect_body = JSON.parse(response.body); 74 let detect_body = JSON.parse(response.body);
...@@ -85,12 +90,15 @@ const option_maker = (language_type, event) => { ...@@ -85,12 +90,15 @@ const option_maker = (language_type, event) => {
85 resolve(options); 90 resolve(options);
86 } 91 }
87 else{ 92 else{
93 + // 예외처리
88 reject(new Error("request is failed")); 94 reject(new Error("request is failed"));
89 } 95 }
90 }) 96 })
91 }) 97 })
92 } 98 }
93 99
100 +// options를 받아서 post 요청을 통해 번역을 실행한다.
101 +// response를 JSON parsing 한 뒤 결과 result에 메세지를 담아서 반환한다.
94 const receive_result = (options, event) => { 102 const receive_result = (options, event) => {
95 return new Promise((resolve, reject) => { 103 return new Promise((resolve, reject) => {
96 var result = { type:'text', text: ''}; 104 var result = { type:'text', text: ''};
...@@ -105,6 +113,7 @@ const receive_result = (options, event) => { ...@@ -105,6 +113,7 @@ const receive_result = (options, event) => {
105 resolve(result); 113 resolve(result);
106 } 114 }
107 else{ 115 else{
116 + // 예외처리
108 result.text = '언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.'; 117 result.text = '언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.';
109 client.replyMessage(event.replyToken,result).then(resolve).catch(reject); 118 client.replyMessage(event.replyToken,result).then(resolve).catch(reject);
110 reject(new Error("request is failed")); 119 reject(new Error("request is failed"));
......