2017-10-21 2 views
0

Ich habe eine Datei, in der es viel Code in einer Funktion gibt. Sagen wir, dass der Funktionsname MessageHandler ist und in dieser Funktion gibt es eine Menge von if sonst Bedingung und Code, die ausgeführt werden sollen, nachdem die Bedingung wahr ist. Das Problem ist, dass ich diesen Code mit JavaScript so modularisieren möchte, dass er wartbar ist und auch Fehler leicht zu finden sind. Kann für jeden logic.What verschiedene Dateien werden schaffen, ist der beste AnsatzIch möchte Code mit JavaScript modualrise

Teil des Codes:

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

Blick in ES6 Module: https://www.sitepoint.com/understanding-es6-modules/ und webpack: https://webpack.github.io/ – sbking

+0

Nein, nicht darüber nachdenken, viele Dateien zur Zeit. Schreibe einfach viele kleine Funktionen auf den ersten. – Bergi

Antwort

1

Sie patterns wie ein Modul verwenden könnte. Sie Ihren Code lesbar, wie eine Geschichte, setzt jedes Stück Code in einer Funktion und halten diese Funktionen in Dateien, in denen sinnvoll da sein, und wenn Sie Hilfe benötigen Aufruf wie folgt:

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

Hier ist eine berühmte Design Pattern Book. :)

+0

danke, ich weiß, dass wir Modul-Muster in diesem Fall verwenden können. Aber sollte ich Funktion oder Datei für jede if/sonst Bedingung? – SmitSherlock

+0

Zunächst denke ich in Ihrem Beispiel, würde ich validate Nachrichtendatei, und ich würde eine Funktion zum Validieren wie userMessage und Ereignis True/False und nach, make userMessage validate receive ... params erstellen, so können Sie verwenden einige Funktionen Array oder enthält. Tun Sie Funktionen, um Ihren Code zu säubern, danach werden Sie in der Zukunft besser umgestalten, nur um keine Zeit zu verschwenden. – joelbarbosa

+0

Ok..Aber ich habe unterschiedliche Antwort für verschiedene Nachricht, wie ich es generischer Funktion für alle Arten von Eingabe machen und Antwort entsprechend senden könnte ?? – SmitSherlock

Verwandte Themen