2017-10-21 82 views
0

我有一个文件,其中有很多代码在一个函数中。假设函数名称为MessageHandler,并且在条件为真后,该函数中会有很多if else条件和代码要执行。问题是我想模块化使用JavaScript的代码,以便它可以维护,也很容易找到错误。对于每logic.What可创建不同的文件是最好的办法守则我想使用javascript模块化代码

部分:

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像模块。 做你的代码更易读,像历史,把每一段代码中的一个功能,并保持这些功能的文件,其中有意义在那里,当你需要帮助调用如下:

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

这里有一个着名的Design Pattern Book。 :)

+0

谢谢,我知道我们可以在这种情况下使用模块模式。但我应该为每个if/else条件创建函数或文件? – SmitSherlock

+0

首先,在你的例子中思考,我会把验证消息文件,我会创建一个函数来验证认为像userMessage和事件真/假和之后,使其userMessage验证接收... params,所以可以使用一些函数数组或包含。做功能清理你的代码,之后,将来你会更好地重构,而不是浪费时间。 – joelbarbosa

+0

好的。但是我对不同的消息有不同的响应,我可以如何使它更通用的功能,以各种输入和发送答复根据? – SmitSherlock