
想实现一个输入密码控制台不显示的功能,奇怪的问题是,在退格键那部分,当我控制台使用 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 |