想实现一个输入密码控制台不显示的功能,奇怪的问题是,在退格键那部分,当我控制台使用 backspace 退格键删除时,charCodeAt 的值居然是 127,一开始写的 8 一直出错,这是为何,因为 toString()的原因吗
const stdout = process.stdout
const stdin = process.stdin
stdout.write("password:")
stdin.setRawMode(true)
stdin.resume()
let input = ''
const pn = (data) => {
const c = data.toString()
switch (c) {
case '\u0004': // Ctrl-d
case '\r':
case '\n':
return enter()
case '\u0003': // Ctrl-c
return ctrlc()
default:
// backspace
if (c.charCodeAt(0) === 127){
return backspace()
}
else{
return newchar(c)
}
}
}
stdin.on("data", pn);
function enter() {
stdin.removeListener('data', pn)
console.log("\nYour password is: " + input)
stdin.setRawMode(false)
stdin.pause()
}
function ctrlc() {
stdin.removeListener('data', pn)
stdin.setRawMode(false)
stdin.pause()
}
function newchar(c) {
input += c
stdout.write("*")
}
function backspace() {
input = input.slice(0, input.length - 1)
}
![]() |
1
ysc3839 2020-12-09 13:09:09 +08:00 via Android
|