我想使用javascript模块化代码
我有一个文件,其中有很多代码在一个函数中。假设函数名称为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;
}
}
}
你可以使用patterns像模块。 做你的代码更易读,像历史,把每一段代码中的一个功能,并保持这些功能的文件,其中有意义在那里,当你需要帮助调用如下:
doActionOne()
doOtherAction(params)
isValidAction() // use is to validate true/false
这里有一个着名的Design Pattern Book。 :)
谢谢,我知道我们可以在这种情况下使用模块模式。但我应该为每个if/else条件创建函数或文件? – SmitSherlock
首先,在你的例子中思考,我会把验证消息文件,我会创建一个函数来验证认为像userMessage和事件真/假和之后,使其userMessage验证接收... params,所以可以使用一些函数数组或包含。做功能清理你的代码,之后,将来你会更好地重构,而不是浪费时间。 – joelbarbosa
好的。但是我对不同的消息有不同的响应,我可以如何使它更通用的功能,以各种输入和发送答复根据? – SmitSherlock
调查ES6模块:https://www.sitepoint.com/understanding-es6-modules/和webpack:https://webpack.github.io/ – sbking
不,不要考虑许多文件目前。首先写许多小功能。 – Bergi