V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zxCoder
V2EX  ›  问与答

nodejs 控制台输入问题

  •  
  •   zxCoder · 2020-12-09 11:03:56 +08:00 · 667 次点击
    这是一个创建于 1294 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想实现一个输入密码控制台不显示的功能,奇怪的问题是,在退格键那部分,当我控制台使用 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)
    }
    
    
    6 条回复    2020-12-09 14:04:11 +08:00
    zxCoder
        2
    zxCoder  
    OP
       2020-12-09 13:46:21 +08:00
    ysc3839
        3
    ysc3839  
       2020-12-09 13:47:59 +08:00 via Android
    @zxCoder 你想表达什么?
    zxCoder
        4
    zxCoder  
    OP
       2020-12-09 13:58:30 +08:00
    @ysc3839 没看懂你发的啥啊 这跟我的问题没关系吧
    ysc3839
        5
    ysc3839  
       2020-12-09 14:00:58 +08:00
    @zxCoder 怎么没关系?这个就是关于隐藏输入密码的呀。
    zxCoder
        6
    zxCoder  
    OP
       2020-12-09 14:04:11 +08:00
    @ysc3839 我问的是退格键的 unicode 码怎么变成 127.。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1160 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:53 · PVG 06:53 · LAX 15:53 · JFK 18:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.