Npm 提示 - 自定义验证和多行消息?
Npm prompt - custom validation and multiline message?
我正在开发一个基于 nodejs 和 npm 包的 CLI 程序 "prompt"。
假设我想要这个提示,将输入放入变量 pet
:
Choose a pet:
(1) - Cat
(2) - Dog
(3) - Fish
(4) - Rabbit
(5) - Rat
: >
基本上我完成了功能,但我遇到了以下问题:
如果我使用 conform
函数进行自定义验证 - 那么我的自定义消息 - 多行文本 - 永远不会出现。变量的名称 - pet
- 只出现。但是我想进行验证,因为我想确保用户不会输入 333
例如。
如果我删除 conform
自定义验证 - 我可以有多行文本,但随后会发生其他事情:发生输入的闪烁矩形与多行文本重叠。而且我不能在多行消息的最后一行之后blink
。
(在上面的例子中,闪烁发生在数字 5 上。)
知道如何解决我遇到的两个问题吗? ... :)
================== 编辑:添加代码示例 ===================
这是我生成多行文本的方式:
// generate the multiline text ..
var petsMessage = 'Choose a pet: \n';
var pets = [...];
for(var i = 0, l = pets.length; i < l; i++) {
petsMessage += ' (' + (i+1) + ') - ' + pets[i] + "\n";
}
这是我生成多行文本提示的方式,但没有验证:
// define the prompt stuff ..
var promptInfo = {
properties: {
Pet: {
message: petsMessage,
required: true
},
}
};
这是经过验证的,但多行消息不起作用:
// define the prompt stuff ..
var promptInfo = [
{
name: 'Pet',
message: petsMessage,
required: true,
conform: function(value) {
value = parseInt(value);
if(value > 0 && value < pets.length) {
return true;
} else {
return false;
}
}
}
];
我认为问题在于,在带有验证的第二个片段中,您在消息 属性 中分配了实际问题,您应该在描述中分配它。消息 属性 指的是错误消息。请试试这个:
var petsMessage = 'Choose a pet: \n';
var pets = ["dog","cat","frog"];
for(var i = 0, l = pets.length; i < l; i++) {
petsMessage += '\t (' + (i+1) + ') - ' + pets[i] + "\n";
}
var prompt = require('prompt');
var promptInfo = [
{
name: 'Pet',
description: petsMessage,
required: true,
message: 'Options allowed:: 1'+'-'+pets.length,
conform: function(value) {
value = parseInt(value);
return value > 0 && value <= pets.length
}
}
];
prompt.start();
prompt.get(promptInfo, function (err, result) {
console.log('you Choose',result,'::::',pets[result.Pet-1])
});
实际上,"alex-rokabills" 的解决方案也不是完美的:( ...它肯定更好,但我仍然看到问题。
如果我使用少量物品就可以了:
但是如果这个数字增长一点点:
对于大提示:
另外 - 我可以去掉开头的 "prompt:" 吗? ...
我正在开发一个基于 nodejs 和 npm 包的 CLI 程序 "prompt"。
假设我想要这个提示,将输入放入变量 pet
:
Choose a pet:
(1) - Cat
(2) - Dog
(3) - Fish
(4) - Rabbit
(5) - Rat
: >
基本上我完成了功能,但我遇到了以下问题:
如果我使用
conform
函数进行自定义验证 - 那么我的自定义消息 - 多行文本 - 永远不会出现。变量的名称 -pet
- 只出现。但是我想进行验证,因为我想确保用户不会输入333
例如。如果我删除
conform
自定义验证 - 我可以有多行文本,但随后会发生其他事情:发生输入的闪烁矩形与多行文本重叠。而且我不能在多行消息的最后一行之后blink
。
(在上面的例子中,闪烁发生在数字 5 上。)
知道如何解决我遇到的两个问题吗? ... :)
================== 编辑:添加代码示例 ===================
这是我生成多行文本的方式:
// generate the multiline text ..
var petsMessage = 'Choose a pet: \n';
var pets = [...];
for(var i = 0, l = pets.length; i < l; i++) {
petsMessage += ' (' + (i+1) + ') - ' + pets[i] + "\n";
}
这是我生成多行文本提示的方式,但没有验证:
// define the prompt stuff ..
var promptInfo = {
properties: {
Pet: {
message: petsMessage,
required: true
},
}
};
这是经过验证的,但多行消息不起作用:
// define the prompt stuff ..
var promptInfo = [
{
name: 'Pet',
message: petsMessage,
required: true,
conform: function(value) {
value = parseInt(value);
if(value > 0 && value < pets.length) {
return true;
} else {
return false;
}
}
}
];
我认为问题在于,在带有验证的第二个片段中,您在消息 属性 中分配了实际问题,您应该在描述中分配它。消息 属性 指的是错误消息。请试试这个:
var petsMessage = 'Choose a pet: \n';
var pets = ["dog","cat","frog"];
for(var i = 0, l = pets.length; i < l; i++) {
petsMessage += '\t (' + (i+1) + ') - ' + pets[i] + "\n";
}
var prompt = require('prompt');
var promptInfo = [
{
name: 'Pet',
description: petsMessage,
required: true,
message: 'Options allowed:: 1'+'-'+pets.length,
conform: function(value) {
value = parseInt(value);
return value > 0 && value <= pets.length
}
}
];
prompt.start();
prompt.get(promptInfo, function (err, result) {
console.log('you Choose',result,'::::',pets[result.Pet-1])
});
实际上,"alex-rokabills" 的解决方案也不是完美的:( ...它肯定更好,但我仍然看到问题。
如果我使用少量物品就可以了:
但是如果这个数字增长一点点:
对于大提示:
另外 - 我可以去掉开头的 "prompt:" 吗? ...