首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Inquirer.js从sql数据库填充列表选项

Inquirer.js从sql数据库填充列表选项
EN

Stack Overflow用户
提问于 2021-03-14 16:35:07
回答 1查看 460关注 0票数 1

我正在使用inquirer.js来构建一个命令行雇员数据库。是否可以从inquirer.js中的sql数据库动态填充选择数组?

例如

代码语言:javascript
复制
inquirer.prompt([
        {   type: 'list',
            message: "Choose department to add Role to",
            name: "department",
            choices: [
                `SELECT * FROM departments`
            ]
        }
    ])

离开是我想要访问的表,我希望它返回所有部门的列表作为选择

EN

回答 1

Stack Overflow用户

发布于 2022-07-24 23:58:19

实际上,我最近遇到了这个问题,并且有了一个有效的解决方案!!

查询器的选择键可以使用函数定义,但希望函数返回一个对象数组;每个对象表示一个选项,并有一个name:键作为选项向用户显示,value:键是inquirer在应答对象中存储的答案值(例如数字、字符串或布尔值等)。下面是一个结构的示例,选择键期望从函数返回:

代码语言:javascript
复制
[
   {
      name: 'Choice 1',
      value: 1,
   },
   {
      name: 'Choice 2',
      value: 'Something',
   },
   {
      name: 'Choice 3',
      value: false,
   }
]

确保您检查您的函数返回的数据,并确保您有这种格式,以便inquirer的选择键接受它!

下面是我如何用数据库实现它:

我在连接上使用了一个.promise(),这样我就可以使用异步/等待语法。下面是我为mysql2建立的连接:

代码语言:javascript
复制
// use .promise() so that we can use await on connection
const connection = mysql.createConnection({
    host: 'localhost',
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: 'employees_db',
}).promise();

下面是一个特殊的问题对象,它的choices:由一个名为departmentChoices()的函数定义,该函数从mysql数据库中获取所有部门的选择。确保这也是在异步函数中定义的,以便您可以使用await

代码语言:javascript
复制
        {
            message: "Which Department's budget do you want to see?",
            name: 'id',
            type: 'list',
            choices: await departmentChoices(),
            when(answers) {
                return answers.task === 'View a Department Budget';
            },
        },

这是函数定义。为了便于可读性,我选择使用异步/等待数据库查询。为了获得更好的错误处理和最佳实践,您可能应该将其包装在try/catch中。注意,我对id使用了别名value,因为这是我希望在选择对象中为value:键使用的值。name不需要别名,因为它是我希望存储在选择对象中的name:键下的值。

代码语言:javascript
复制
const departmentChoices = async () => {
    const departmentQuery = `SELECT id AS value, name FROM department;`;
    const departments = await connection.query(departmentQuery);
    return departments[0];
};

这是这个函数将从我的数据库返回的数组:

代码语言:javascript
复制
[
  { value: 1, name: 'Hair and Makeup' },
  { value: 2, name: 'Finance' },
  { value: 3, name: 'Set Design' },
  { value: 4, name: 'Wardrobe' }
]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66626936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档