You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

团队生成工具Inquirer跳转异常:选Engineer后流程终止

团队资料生成工具问题排查:选择Engineer后流程终止

我是Bootcamp学员,正在开发团队资料生成工具。完成经理信息输入后,可选择添加Engineer、Intern或停止添加,但选择Engineer选项时,程序未触发对应的Inquirer输入提示,直接终止终端流程,以下是我的代码:

const inquirer = require("inquirer");
const fs = require("fs");
const path = require("path");

const Engineer = require("./lib/Engineer");
const Intern = require("./lib/Intern");
const Manager = require("./lib/Manager");

const DIST_DIR = path.resolve(__dirname, "dist");
const distPath = path.join(DIST_DIR, "team.html");

const render = require("./src/renderHTML");

let teamMembers = [];
let teamIDs = [];

function startApp() {
  function addManager() {
    inquirer
      .prompt([
        {
          type: "input",
          name: "managerName",
          message: "What is the your name?",
          validate: (input) => {
            if (input) {
              return true;
            } else {
              console.log("Please enter your name to continue!");
              return false;
            }
          },
        },    (other questions here)
      ])
      .then((answers) => {
        const manager = new Manager(
          answers.managerName,
          answers.managerID,
          answers.managerEmail,
          answers.managerOffice
        );
        teamMembers.push(manager);
        teamIDs.push(answers.managerID);
        addTeamMember();
      });
  }

  function addTeamMember() {
    inquirer
      .prompt([
        {
          type: "list",
          name: "member",
          message: `Select which team member you'd like to add to your team!`,
          choices: ["Engineer", "Intern", "No team members to add"],
        },
      ])
      .then((answers) => {
        switch (answers.memberChoice) {
          case "Engineer":
            generateEng();                 
            break;                      
          case "Intern":                
            generateInt();
            break;
          default:
            makeTeam();
        }
      });
  }

  function generateEng() {
    inquirer
      .prompt([
        {
          type: "input",
          name: "engName",
          message: `What is the engineer's name?`,
          validate: (input) => {
            if (input) {
              return true;
            } else {
              console.log("Please enter the engineer's name to continue!");
              return false;
            }
          },
        },  (other questions here)
      ])
      .then((answers) => {
        const engineer = new Engineer(
          answers.engName,
          answers.engID,
          answers.engEmail,
          answers.engGithub
        );
        teamMembers.push(engineer);
        teamIDs.push(answers.engID);
        addTeamMember();
      });
  }

  function generateInt() {
    inquirer
      .prompt([
        {
          type: "input",
          name: "Name",
          message: `What is the intern's name?`,
          validate: (input) => {
            if (input) {
              return true;
            } else {
              console.log("Please enter the intern's name to continue!");
              return false;
            }
          },
        }, (other questions here)
      ])
      .then((answers) => {
        const intern = new Intern(
          answers.intName,
          answers.intID,
          answers.intEmail,
          answers.intGithub
        );
        teamMembers.push(intern);
        teamIDs.push(intID);
        addTeamMember();
      });
  }

  function makeTeam() {
    fs.writeFileSync(distPath, render(teamMembers), "utf-8");
  }

  addManager();
}

startApp();

问题根源与修复方案

1. 核心错误:switch判断的属性名不匹配

在addTeamMember函数中,Inquirer的列表选项name设置为member,但后续switch判断时错误使用了answers.memberChoice——这个属性根本不存在,导致所有case都不匹配,直接触发default分支执行makeTeam(),流程提前终止。

修复代码:

function addTeamMember() {
  inquirer
    .prompt([
      {
        type: "list",
        name: "member",
        message: `Select which team member you'd like to add to your team!`,
        choices: ["Engineer", "Intern", "No team members to add"],
      },
    ])
    .then((answers) => {
      // 修正为answers.member,与选项name一致
      switch (answers.member) {
        case "Engineer":
          generateEng();
          break;
        case "Intern":
          generateInt();
          break;
        default:
          makeTeam();
      }
    });
}

2. 额外隐藏bug修复

除了核心问题,代码中还有几处会导致后续流程出错的问题:

  • generateInt函数的输入项与取值不匹配:输入项的name是Name,但后续用answers.intName取值,需将输入项name改为intName;
  • generateInt的变量未定义:teamIDs.push(intID)中的intID未定义,需改为answers.intID;
  • Intern实例化参数错误:通常Intern类的第四个参数是学校而非Github,需将answers.intGithub改为对应输入项(比如answers.intSchool),同时补充对应的Inquirer输入项。

修正后的generateInt示例:

function generateInt() {
  inquirer
    .prompt([
      {
        type: "input",
        name: "intName", // 修正name属性
        message: `What is the intern's name?`,
        validate: (input) => {
          if (input) {
            return true;
          } else {
            console.log("Please enter the intern's name to continue!");
            return false;
          }
        },
      },
      {
        type: "input",
        name: "intID",
        message: `What is the intern's ID?`,
        validate: (input) => input ? true : (console.log("Enter an ID!"), false)
      },
      {
        type: "input",
        name: "intEmail",
        message: `What is the intern's email?`,
        validate: (input) => input ? true : (console.log("Enter an email!"), false)
      },
      {
        type: "input",
        name: "intSchool", // 新增学校输入项
        message: `What is the intern's school?`,
        validate: (input) => input ? true : (console.log("Enter a school!"), false)
      }
    ])
    .then((answers) => {
      const intern = new Intern(
        answers.intName,
        answers.intID,
        answers.intEmail,
        answers.intSchool // 修正为学校参数
      );
      teamMembers.push(intern);
      teamIDs.push(answers.intID); // 修正变量引用
      addTeamMember();
    });
}

内容的提问来源于stack exchange,提问作者joonkidk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:01:11