我正在开发一个基于nodejs和npm包“ prompt”的CLI程序。假设我要显示此提示,将输入内容放入变量中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;
}
}
}
];
我相信问题在于,在带有验证的第二个片段中,您在message属性中分配了实际问题,您应该在说明中进行分配。message属性是指错误消息。请尝试以下方法:
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])
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句