发布于 2026-01-06 0 阅读
0

基于 Node CLI 的餐厅反馈应用程序,使用 Chalk、Clear、Figlet 和 Enquirer 等工具

基于 Node CLI 的餐厅反馈应用程序,使用 Chalk、Clear、Figlet 和 Enquirer 等工具

我们来简单聊聊即将开发的产品。我们正在为一家餐厅开发一款基于命令行界面(CLI)的反馈应用。用户可以通过这款应用反馈他们对食物口味、质量的体验,并提出宝贵的建议。

我们开始吧。

我们创建了Feedback-CLI-App文件夹,并安装了EnquirerChalknpm 模块。最终文件应如下所示: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"
  }
}
Enter fullscreen mode Exit fullscreen mode

现在,index.js在应用根目录创建一个文件,并引入我们之前安装的这些模块。我会逐一介绍它们的使用场景。

const clear = require("clear");
const chalk = require("chalk");
const figlet = require("figlet");
Enter fullscreen mode Exit fullscreen mode

我们希望在应用程序运行时清除控制台,因此我们使用了这个clear模块。

// Clearing Console On App Starts
clear();
Enter fullscreen mode Exit fullscreen mode

现在我们想向用户展示一个漂亮的标题和一条欢迎信息,所以我们为此使用了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"
    )} `
  )
);
Enter fullscreen mode Exit fullscreen mode

当前输出应如下所示
替代文字

现在我们来添加反馈问题,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
        }
      ]
    }
  ];
Enter fullscreen mode Exit fullscreen mode

在函数结束之前,我们需要调用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);
  });
};
Enter fullscreen mode Exit fullscreen mode

最后,我们只需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;

Enter fullscreen mode Exit fullscreen mode

现在我们只需要将该函数导入到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();

Enter fullscreen mode Exit fullscreen mode

就这样!以下是最终输出结果:
替代文字

太棒了!你做到了!

文章来源:https://dev.to/rizwanjamal/node-cli-based-restaurant-feedback-app-with-using-chalk-clear-figlet-enquirer-22jd