实践:使用Node.js从终端中读入内容

简介: 实践:使用Node.js从终端中读入内容

前言


平时在写练习算法题的时,遇到线上笔试时,大部分在线练题网站都需要自己写输入输出,如常见的牛客赛码网。部分不熟悉Node.js输入输出的朋友,就会感到有力无处使


通常此类网站是会直接提供一个readline或者read_line方法用来实现数据录入

实际上Node也是提供了一个模块readline:逐行读取来实现此功能的


笔者用过的练题网站只有leetcode在使用js书写时只需要实现功能函数就行,就不需要考虑如何从键盘录入内容


本文就和大家分享一下利用Node-readline模块实现通过终端中录入内容


简单使用


const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})
// 不换行输出
process.stdout.write('请输入两个数字:')
// 监听键入回车事件
rl.on('line', (str) => {
    // str即为输入的内容
    const [a, b] = str.split(' ')
    console.log('和为:', (+a) + (+b));
    // 关闭逐行读取流 会触发关闭事件
    rl.close()
})
// 监听关闭事件
rl.on('close', () => {
    console.log('触发了关闭事件');
})


代码逻辑为:


  • 输入两个数字
  • 计算这两数字的和


假设上面的文件叫index.js,接下来我们直接输入下面运行


node index.js


运行结果如下:


网络异常,图片无法展示
|


感觉并没有其它语言用起来那么安逸,比如:


  • C++:cin>>param
  • C:scanf("%s",&param)
  • C#:param = Console.ReadLine()
  • ...等等


怎样才能让Node.js从终端中录入数据变得像上述语言一样简单呢?

我们用动动自己的手指封装一下


封装


const rdl = require('readline')
/**
 * 读入一行
 */
function readline() {
    const rl = rdl.createInterface({
        input: process.stdin,
        output: process.stdout
    })
    return new Promise(resolve => {
        rl.on('line', (str) => {
            resolve(str)
            rl.close()
        })
    })
}
module.exports = readline


我们在编写一个新的test.js,上面的叫read.js 放在同一目录下


const readline = require('./readline')
async function main(){
    process.stdout.write('第一个单词:')
    const a = await readline()
    process.stdout.write('第二个单词:')
    const b = await readline()
    console.log(a , b);
}
main()


node test.js


运行结果


网络异常,图片无法展示
|


现在用起来就方便多了,已经有一点其它语言的味道了


其它工具方法封装


util.js


print


不自动换行的打印方法


function print(str){
    process.stdout.write(str)
}


使用:


print('hello world\n')
print('666\n')


readNumber


读取一个数字,因为readline读取的所有内容都是字符串的形式,读取数字的话需要自己做转换


const readline = require('./readline')
async function readNumber(){
    return +(await readline())
}


测试:


async function main(){
    const a = await readline()
    const b = await readNumber()
    console.log('a',typeof a);
    console.log('b',typeof b);
}
main()


运行结果


网络异常,图片无法展示
|


方法汇总


咱可以创建一个 index.js文件,然后将readlinereadNumberprint三个方法统一对外导出:最终如下


const rdl = require('readline')
function print(str){
    process.stdout.write(str)
}
/**
 * 读入一行
 */
function readline() {
    const rl = rdl.createInterface({
        input: process.stdin,
        output: process.stdout
    })
    return new Promise(resolve => {
        rl.on('line', (str) => {
            resolve(str)
            rl.close()
        })
    })
}
async function readNumber(){
    return +(await readline())
}
module.exports = {
    print,
    readline,
    readNumber
}


实践:猜数字


TODO:等待补全


资料汇总


相关文章
|
9月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
存储 JavaScript 前端开发
使用JavaScript构建动态交互式网页:从基础到实践
【10月更文挑战第12天】使用JavaScript构建动态交互式网页:从基础到实践
703 1
|
10月前
|
前端开发 JavaScript Java
【Java进阶】JavaScript电灯开关实例:从理论到实践
这个例子展示了JavaScript的基本功能,包括操作HTML元素,监听事件,以及改变元素的样式。通过学习和理解这个例子,你可以了解到JavaScript在网页中的应用,以及如何使用JavaScript来创建交互式的网页。
207 13
|
JavaScript 前端开发 安全
TypeScript的优势与实践:提升JavaScript开发效率
【10月更文挑战第8天】TypeScript的优势与实践:提升JavaScript开发效率
|
JavaScript 前端开发 开发者
理解JavaScript中的原型链:基础与实践
【10月更文挑战第8天】理解JavaScript中的原型链:基础与实践
|
9月前
|
人工智能 监控 前端开发
基于 Next.js 的书法字体生成工具架构设计与 SSR 优化实践
本项目是一款书法字体生成工具,采用 Next.js 14(App Router)与 Tailwind CSS 构建前端,阿里云 Serverless 部署后端。通过混合渲染策略(SSG/SSR/CSR)、Web Worker 异步计算及 CDN 字体分片加载优化性能。服务端借助阿里云函数计算处理计算密集型任务,将平均耗时从 1200ms 降至 280ms,支持 1000+ QPS。动态路由与 ARMS 监控提升工程化水平,未来计划引入 WebGPU 和 AI 字体风格迁移技术,进一步优化用户体验。
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
382 11
|
11月前
|
缓存 自然语言处理 JavaScript
JavaScript中闭包详解+举例,闭包的各种实践场景:高级技巧与实用指南
闭包是JavaScript中不可或缺的部分,它不仅可以增强代码的可维护性,还能在模块化、回调处理等场景中发挥巨大作用。然而,闭包的强大也意味着需要谨慎使用,避免潜在的性能问题和内存泄漏。通过对闭包原理的深入理解以及在实际项目中的灵活应用,你将能够更加高效地编写出简洁且功能强大的代码。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
缓存 监控 JavaScript
Vue.js 框架下的性能优化策略与实践
Vue.js 框架下的性能优化策略与实践
|
JavaScript 前端开发 API
Vue.js 3:深入探索组合式API的实践与应用
Vue.js 3:深入探索组合式API的实践与应用

热门文章

最新文章