Node.js使用commander开发CLI时提示缺少必填'email'参数的问题排查
报错根因
使用commander开发CLI时,参数解析规则是严格按照命令定义的尖括号占位顺序,依次匹配命令行传入的实参值,要求数量、顺序完全对齐。
当前遇到的报错本质是参数数量不匹配导致的位置错位:
代码里
add命令定义的必填占位顺序:<firstname> <lastname> <dob> <phone> <email>,共5个必须传入的参数位
实际执行命令时,add后面只传入了4个实参:john、doe、555-555-5555、john@gmail.com
commander按顺序匹配后的结果:
john匹配firstname占位doe匹配lastname占位555-555-5555匹配本该填出生日期的dob占位john@gmail.com匹配本该填手机号的phone占位- 最后要求必须传入的
email占位没有对应实参,直接触发missing required argument 'email'报错
对应修复方案
根据实际业务需求二选一调整即可:
- 如果业务本身需要记录客户出生日期,就按参数定义顺序补全
dob字段值再执行命令,示例:node commands.js add john doe 1990-05-20 555-555-5555 john@gmail.com - 如果业务不需要记录
dob字段,是之前开发时多写了占位,就把add命令的定义调整为和实际传入的参数对齐:
把.command('add <firstname> <lastname> <dob> <phone> <email>')改为.command('add <firstname> <lastname> <phone> <email>'),同时同步修改action回调的入参、以及addCustomer函数接收的字段,去掉冗余的dob参数即可。
另外注意:当前代码里add命令的链式调用末尾多了一个无意义的逗号(action语句收尾后的逗号),虽然Node.js宽松的解析规则不会报语法错,但属于冗余代码残留,建议删除保持代码规范。
内容的提问来源于stack exchange,提问作者user14667273
相关产品推荐
相关产品推荐

