基于 Node CLI 的餐厅反馈应用程序,使用 Chalk、Clear、Figlet 和 Enquirer 等工具
我们来简单聊聊即将开发的产品。我们正在为一家餐厅开发一款基于命令行界面(CLI)的反馈应用。用户可以通过这款应用反馈他们对食物口味、质量的体验,并提出宝贵的建议。
我们开始吧。
我们创建了Feedback-CLI-App文件夹,并安装了Enquirer、Chalk和npm 模块。最终文件应如下所示:FigletClearpackage.json
{
"name": "feedback-cli-app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"chalk": "^2.4.2",
"clear": "^0.1.0",
"enquirer": "^2.3.1",
"figlet": "^1.2.1"
}
}
现在,index.js在应用根目录创建一个文件,并引入我们之前安装的这些模块。我会逐一介绍它们的使用场景。
const clear = require("clear");
const chalk = require("chalk");
const figlet = require("figlet");
我们希望在应用程序运行时清除控制台,因此我们使用了这个clear模块。
// Clearing Console On App Starts
clear();
现在我们想向用户展示一个漂亮的标题和一条欢迎信息,所以我们为此使用了figlet一个模块。chalk
// Create Heading Using Chalk & Figlet
console.log(
chalk.yellowBright(
figlet.textSync("Feedback Form", { horizontalLayout: "full" })
)
);
console.log(
chalk.cyanBright(
"\n\tA Simple CLI Based Restaurant Feedback Form Using NodeJS"
)
);
console.log(
chalk.cyanBright(
`\tFor Commands Run ${chalk.greenBright(
"Just Follow These Instruction\n"
)} `
)
);
现在我们来添加反馈问题,questions.js在根目录创建一个文件。在这个文件中,我们将使用enquirer一个很棒的模块,它拥有美观时尚的命令行提示,这些提示用户友好、直观且易于创建。以下是一些提示示例:

在文件中questions.js,引入 enquirer 之后,创建一个函数,该函数返回一个问题数组,如下所示:
const enquirer = require("enquirer");
const feedbackQuestions = () => {
const questions = [
{
type: "input",
name: "name",
message: "What is your name ?"
},
{
type: "autocomplete",
name: "favourite",
message: "Which dish you liked the most ?",
limit: 10,
choices: [
"Biryani",
"Butter Chicken",
"Hamburger",
"Blackberry",
"Strawberry Cheesecake",
"Italian Beef",
"Red Valvet Cake"
]
},
{
type: "multiselect",
name: "improvement items",
message: "Which of these dishes you want them to improve ?",
limit: 7,
choices: [
"Biryani",
"Butter Chicken",
"Hamburger",
"Blackberry",
"Strawberry Cheesecake",
"Italian Beef",
"Red Valvet Cake"
]
},
{
type: "input",
name: "suggestion",
message: "What would you like to suggest ?"
},
{
type: "survey",
name: "experience",
message: "Please rate your experience",
scale: [
{ name: "1", message: "Strongly Disagree" },
{ name: "2", message: "Disagree" },
{ name: "3", message: "Neutral" },
{ name: "4", message: "Agree" },
{ name: "5", message: "Strongly Agree" }
],
margin: [0, 0, 2, 1],
choices: [
{
name: "quality",
message: "The food quality was well",
initial: 3
},
{
name: "taste",
message: "The taste is outclass",
initial: 3
},
{
name: "environment",
message: "The environment is wonderful too",
initial: 3
},
{
name: "service",
message: "I like their service",
initial: 3
}
]
}
];
在函数结束之前,我们需要调用prompt查询器的方法(这是一个异步方法),并将这些questions数组作为参数传递。它将返回一个类似这样的 Promise:
enquirer.prompt(questions).then(ans => {
clear();
console.log(
chalk.yellowBright(
figlet.textSync("Feedback Form", { horizontalLayout: "full" })
)
);
console.log(
chalk.cyanBright("\n\t Thanks For Providing Us Your Feedback !\n")
);
console.log(ans);
});
};
最后,我们只需feedbackQuestions将该模块中的函数导出即可。因此,最终questions.js文件应如下所示:
const enquirer = require("enquirer");
const clear = require("clear");
const chalk = require("chalk");
const figlet = require("figlet");
const feedbackQuestions = () => {
const questions = [
{
type: "input",
name: "name",
message: "What is your name ?"
},
{
type: "autocomplete",
name: "favourite",
message: "Which dish you liked the most ?",
limit: 10,
choices: [
"Biryani",
"Butter Chicken",
"Hamburger",
"Blackberry",
"Strawberry Cheesecake",
"Italian Beef",
"Red Valvet Cake"
]
},
{
type: "multiselect",
name: "improvement items",
message: "Which of these dishes you want them to improve ?",
limit: 7,
choices: [
"Biryani",
"Butter Chicken",
"Hamburger",
"Blackberry",
"Strawberry Cheesecake",
"Italian Beef",
"Red Valvet Cake"
]
},
{
type: "input",
name: "suggestion",
message: "What would you like to suggest ?"
},
{
type: "survey",
name: "experience",
message: "Please rate your experience",
scale: [
{ name: "1", message: "Strongly Disagree" },
{ name: "2", message: "Disagree" },
{ name: "3", message: "Neutral" },
{ name: "4", message: "Agree" },
{ name: "5", message: "Strongly Agree" }
],
margin: [0, 0, 2, 1],
choices: [
{
name: "quality",
message: "The food quality was well",
initial: 3
},
{
name: "taste",
message: "The taste is outclass",
initial: 3
},
{
name: "environment",
message: "The environment is wonderful too",
initial: 3
},
{
name: "service",
message: "I like their service",
initial: 3
}
]
}
];
enquirer.prompt(questions).then(ans => {
clear();
console.log(
chalk.yellowBright(
figlet.textSync("Feedback Form", { horizontalLayout: "full" })
)
);
console.log(
chalk.cyanBright("\n\t Thanks For Providing Us Your Feedback !\n")
);
console.log(ans);
});
};
module.exports = feedbackQuestions;
现在我们只需要将该函数导入到index.js文件中,并在文件末尾调用它。最终index.js文件应该如下所示:
const clear = require("clear");
const chalk = require("chalk");
const figlet = require("figlet");
const feedbackQuestions = require("./questions");
// Clearing Console On App Starts
clear();
// Create Heading Using Chalk & Figlet
console.log(
chalk.yellowBright(
figlet.textSync("Feedback Form", { horizontalLayout: "full" })
)
);
console.log(
chalk.cyanBright(
"\n\tA Simple CLI Based Restaurant Feedback Form Using NodeJS"
)
);
console.log(
chalk.cyanBright(
`\tWelcome To The Feedback Form ${chalk.greenBright(
"Please Answer The Below Questions\n"
)} `
)
);
// Feedback Question
feedbackQuestions();


