V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zxCoder
V2EX  ›  问与答

nodejs 控制台输入问题

  •  
  •   zxCoder · Dec 9, 2020 · 966 views
    This topic created in 1968 days ago, the information mentioned may be changed or developed.

    想实现一个输入密码控制台不显示的功能,奇怪的问题是,在退格键那部分,当我控制台使用 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 replies    2020-12-09 14:04:11 +08:00
    zxCoder
        2
    zxCoder  
    OP
       Dec 9, 2020
    ysc3839
        3
    ysc3839  
       Dec 9, 2020 via Android
    @zxCoder 你想表达什么?
    zxCoder
        4
    zxCoder  
    OP
       Dec 9, 2020
    @ysc3839 没看懂你发的啥啊 这跟我的问题没关系吧
    ysc3839
        5
    ysc3839  
       Dec 9, 2020
    @zxCoder 怎么没关系?这个就是关于隐藏输入密码的呀。
    zxCoder
        6
    zxCoder  
    OP
       Dec 9, 2020
    @ysc3839 我问的是退格键的 unicode 码怎么变成 127.。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2809 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:55 · PVG 18:55 · LAX 03:55 · JFK 06:55
    ♥ Do have faith in what you're doing.