如何使用this.read()和maskchar实现jQuery Terminal登录命令?
jQuery Terminal 登录命令实现方案
直接给你整合好的完整实现代码,附带关键逻辑的说明:
实现代码(链式Promise写法)
$('body').terminal({ login: function() { // 第一步:读取用户名 this.read('Login: ') .then(username => { // 第二步:读取密码,配置掩码字符 return this.read({ prompt: 'Password: ', maskchar: '*' }).then(password => { // 第三步:验证用户名和密码 if (username === 'admin' && password === '123456') { this.echo('登录成功!'); // 这里可以添加登录后的逻辑,比如切换命令上下文、加载权限等 } else { this.echo('用户名或密码错误,请重试!'); } }); }) .catch(error => { this.echo(`登录已取消: ${error}`); }); } }, { greetings: '欢迎使用终端系统,请输入「login」开始登录' });
实现代码(async/await 简洁写法)
如果你的环境支持ES6+,推荐用这种更易读的写法:
$('body').terminal({ async login() { try { // 读取用户名 const username = await this.read('Login: '); // 读取密码,启用掩码 const password = await this.read({ prompt: 'Password: ', maskchar: '*' }); // 验证逻辑 if (username === 'admin' && password === '123456') { this.echo('登录成功!'); } else { this.echo('用户名或密码错误,请重试!'); } } catch (error) { this.echo(`登录已取消: ${error}`); } } }, { greetings: '欢迎使用终端系统,请输入「login」开始登录' });
关键逻辑说明
异步输入的链式处理
jQuery Terminal的this.read()方法返回Promise对象,必须用.then()或者await处理后续流程,确保先获取用户名再进入密码输入环节,避免异步顺序混乱。密码掩码的实现
调用this.read()时传入配置对象,指定maskchar: '*',终端会自动将用户输入的密码字符替换为*,同时实际输入的密码值会正常传递到回调函数中。输入内容的匹配验证
获取到username和password变量后,直接用普通的if条件语句对比即可,变量里存储的就是用户实际输入的内容。取消输入的异常处理
用户按下Ctrl+C取消输入时,read()的Promise会触发reject,通过.catch()或者try/catch捕获该异常,给出友好提示。
内容的提问来源于stack exchange,提问作者NotHim
相关产品推荐
相关产品推荐

