2017-10-21 10 views
0

하나의 파일에 하나의 코드가 있습니다. 그 함수 이름이 MessageHandler이고, 그 함수에서 else 조건과 조건이 참인 후에 실행될 코드가 많이 있다고 가정 해보십시오. 문제는 자바 스크립트를 사용하여 해당 코드를 모듈화하여 유지 관리가 가능하고 버그를 쉽게 찾을 수 있기를 원합니다.자바 스크립트를 사용하여 modualrise 코드를 사용하고 싶습니다.

if (userMessage == "/start" && event.channel == "ibc") { 
     quickReplies.content.text = metaData.introduction.english; 
     quickReplies.msgid = "afterIntro"; 
     quickReplies.options = metaData.language.english; 

     context.sendResponse(JSON.stringify(quickReplies));//First introduction message is sent in english language. 

    } 

     else if (userMessage == "hi" || userMessage == "hello" || userMessage == "help" || userMessage == "hii" || userMessage == "hey" || userMessage == "wassup") { 
     // add filipino and gujarati condition.... 
     if (context.simpledb.roomleveldata.preferredLang == "hindi") { 
      quickReplies.content.text = metaData.introduction.hindi; 
      quickReplies.options = metaData.language.hindi; 
     } 

    else if(context.simpledb.roomleveldata.preferredLang=="gujarati"){ 

       quickReplies.content.text = metaData.introduction.gujarati; 
      quickReplies.options = metaData.language.gujarati 
     } 
      else if(context.simpledb.roomleveldata.preferredLang=="filipino"){ 

       quickReplies.content.text = metaData.introduction.filipino; 
      quickReplies.options = metaData.language.filipino; 
     } 


     else { 
      quickReplies.content.text = metaData.introduction.english; 
      quickReplies.options = metaData.language.english; 
     } 
     quickReplies.msgid = "afterIntro"; 

     context.sendResponse(JSON.stringify(quickReplies)); 


    } else if (event.messageobj.refmsgid == "afterIntro" || (userMessage.indexOf("change category") > -1) || (userMessage.indexOf("श्रेणी बदलें") > -1) ||(userMessage.indexOf("કેટેગરી બદ") > -1) ||(userMessage.indexOf("baguhin ang kategorya") > -1)) { 
     if (userMessage == "अंग्रेजी" || userMessage == "english" || userMessage == "ઇંગલિશ" ||userMessage=="ingles") 
     { 
      context.simpledb.roomleveldata.preferredLang = "english"; 
      context.console.log("Enter into english section"); 
      // context.simpledb.roomleveldata.optinFlag = '1'; 
      userMessage = "english"; 
     } else if (userMessage == "हिंदी" || userMessage == "hindi" || userMessage == "હિન્દી") 
     { 
      context.simpledb.roomleveldata.preferredLang = "hindi"; 
      // context.simpledb.roomleveldata.optinFlag = '1'; 
      userMessage = "hindi"; 
     } else if (userMessage == "गुजराती" || userMessage == "gujarati" || userMessage == "ગુજરાતી"){ 
      context.simpledb.roomleveldata.preferredLang = "gujarati"; 
      // context.simpledb.roomleveldata.optinFlag = '1'ફિલિપિનો" 
      userMessage = "gujarati"; 
     } else if (userMessage == "filipino" || userMessage == "फिलिपिनो" || userMessage == "ફિલિપિનો") { 
      context.simpledb.roomleveldata.preferredLang = "filipino"; 
      // context.simpledb.roomleveldata.optinFlag = '1'ફિલિપિનો" 

      userMessage = "filipino"; 
     } else { 
      userMessage = context.simpledb.roomleveldata.preferredLang 
      // context.simpledb.roomleveldata.optinFlag = '1'; 
     } 
     var languageArray = metaData.language.english; 
     for (var i = 0; i < languageArray.length; i++) { 
      if (userMessage == metaData.language.english[i]) { 
       console.log("language"+metaData.language.english[i]); 
       quickReplies.content.text = metaData.introMessage[metaData.language.english[i].toString()]; 
       quickReplies.msgid = "afterLanguage"; 
       quickReplies.options = metaData[metaData.language.english[i].toString()]; 
       context.sendResponse(JSON.stringify(quickReplies));///Intro message and categories to choose from. 
      } 
     } 
    } else if (userMessage == 'change language' || (userMessage.indexOf('hindi') > -1) || (userMessage.indexOf('english') > -1) || (userMessage.indexOf('gujarati') > -1)|| (userMessage.indexOf('filipino') > -1)) { 
     var currentLanguage = context.simpledb.roomleveldata.preferredLang; 
     quickReplies.content.text = metaData.introduction[currentLanguage + 'language']; 
     quickReplies.options = metaData.language[currentLanguage]; 
     quickReplies.msgid = "afterIntro"; 
     context.console.log("currentLanguage=======" + currentLanguage); 
     context.sendResponse(JSON.stringify(quickReplies));////give option to change the language in preferred language with prefereed messsage describing what to do. 
    } else if (userMessage == 'powered by gupshup') { 
     context.sendResponse("This chatbot is powered by gupshup.io- world's leading filipinoform." + 
      " Join the bot bandwagon along with- VentureBeat, Infosys, Sage, ICICI etc. " + 
      "to build captivating and powerful experiences for your users."); 
    } else if (event.messageobj.refmsgid == "afterLanguage") 
    // }else if(context.simpledb.roomleveldata.optinFlag == '1') 
    { 
     context.simpledb.roomleveldata.optinFlag = '0'; 
     var quoteType; 
     var items = []; 
     var currentLanguage = context.simpledb.roomleveldata.preferredLang; 
     for (var i = 0; i < metaData[currentLanguage].length; i++) //["Motivational", "Love", "Life", "Funny", "Positive"] 
     { 
      quoteType = metaData[currentLanguage][i].toLowerCase().toString(); //["Motivational", "Love", "Life", "Funny", "Positive"] 
      context.console.log(userMessage + "--------quoteType----" + quoteType); 
      if (userMessage == quoteType) { 
       context.console.log("Cureeeeentttt quote typeeeee"+userMessage); 
       catalogue.msgid = quoteType; 
       // if(currentLanguage == "filipino") 
       // { 
       // quoteType = metaData['english'][i+1].toLowerCase().toString(); // 
       // }else 
       // { 
        quoteType = metaData['english'][i].toLowerCase().toString(); // 
       // } 

        quoteType=quoteType.replace(/ /g,"_"); 
        context.console.log("QQQQQQQQQQQQUOTEEEEEEE"+quoteType); 
       var imageURL = context.simpledb.botleveldata[quoteType + 'JSONObj']; 
       context.console.log("imageURL--------" + imageURL); 
       if(JSON.stringify(imageURL).indexOf(currentLanguage)>-1) 
       { 
        for (var j = 0; j < imageURL.length; j++) // {["ImageURL:'',Language:''"]} 
        { 
         context.console.log(imageURL[j]['Language'].toString() + "---------currentLanguage" + currentLanguage); 
          if (imageURL[j]['Language'].toString() == currentLanguage) { 
           context.console.log("imageURL[j]['Language'].toString()==============" + imageURL[j]['Language'].toString()) 
           if (j % 9 == 0 && j != 0) { 
            items.push({ 
             "title": "For More Quotes", 
             "imgurl": "https://s3.amazonaws.com/gs-bot-images/Quote-Mister/search.jpg", 
             "options": [{ 
              "type": "text", 
              "title": "Keep Looking" 
             }] 
            }); 
            break; 
           } else { 
            items.push({ 
             "title": metaData.carousal[currentLanguage + "_title"], 
             "imgurl": imageURL[j]['Image URL'].toString(), 
             "options": [{ 
              "type": "url", 
              "title": "Preview", 
              "url": imageURL[j]['Image URL'].toString() 
             }, { 
              "type": "url", 
              "title": metaData.carousal[currentLanguage + '_button_text'][0], 
              "url": "https://www.gupshup.io/developer/bot/devNewImageQuotes/share?text=" + imageURL[j]['Image URL'].toString(), 
              "webview_height_ratio": "compact" 
             }, { 
              "type": "url", 
              "title": metaData.carousal[currentLanguage + '_button_text'][1], 
              "url": "https://www.facebook.com/sharer/sharer.php?u=" + imageURL[j]['Image URL'].toString(), 
              "webview_height_ratio": "compact" 
             }] 
            }); 
            context.simpledb.roomleveldata['index'] = j; 
           } 
          } 
        } 
+1

ES6 모듈 살펴보기 : https://www.sitepoint.com/understanding-es6-modules/ 및 webpack : https://webpack.github.io/ – sbking

+0

아니요, 많은 파일에 대해 생각하지 마십시오. 지금 당장. 처음에는 많은 작은 함수를 작성하십시오. – Bergi

답변

1

당신은 모듈처럼 patterns을 사용할 수있는 모든 logic.What에 대해 서로 다른 파일을 생성 될 수있다 최선의 방법에게 코드의

부분이다. , 역사처럼, 더 읽기 쉬운 코드를 수행 하나의 함수에서 코드의 각 조각을 넣어 메이크업 감각이있을 경우 파일에 이러한 기능을 유지하고, 당신이 필요로 할 때 다음과 같이 호출 할 수 있도록 :

doActionOne() 
 
doOtherAction(params) 
 
isValidAction() // use is to validate true/false

여기에 유명한 Design Pattern Book이 있습니다. :)

+0

고마워, 나는이 경우에 모듈 패턴을 사용할 수 있다는 것을 안다.하지만 if/else 조건을 위해 함수 나 파일을 만들어야 하는가? – SmitSherlock

+0

우선, 예를 들어 생각해 보면, 메시지 파일의 유효성 검사를 할 것이고 userMessage 및 true/false 이벤트와 같은 생각을 검증하는 함수를 만들면 userMessage의 수신 확인 ... params를 사용할 수 있습니다. 일부 기능 배열 또는 포함. 나중에 코드를 정리하는 기능을 수행하면 이후에 시간이 낭비되지 않고 더 잘 리팩터링됩니다. – joelbarbosa

+0

좋아 ..하지만 나는 다른 메시지에 대한 다른 응답을 어떻게 모든 종류의 입력에 대한 더 일반적인 기능을 만들 수 있고 그에 따라 회신을 보내 ?? – SmitSherlock