当前位置: 首页 > 科技观察

一些小众但有用的Node.js包

时间:2023-03-12 03:21:43 科技观察

yargsyargs是一个用于处理命令行参数的包,它可以帮助您处理自定义命令行标志和输入的任何类型的数据,包括布尔值、浮点数和字符串等.这个包非常简单,不需要您在项目中编写大量样板代码。yargs可以帮助你处理“usagehelp”输出,它可以很容易地告诉用户在使用你的程序时需要输入哪些选项,包括哪些是必须的。varargv=require('yargs').usage('用法:$0-x[num]-y[num]').demand(['x','y']).argv;console.log('Pow(x,y):',Math.pow(argv.x,argv.y));将以上代码保存为index.js,然后在命令行执行nodeindex.js-x3,你会看到如下信息:Usage:index.js-x[num]-y[num]Options:-x[required]-y[required]Missingrequiredargument:yyargs可以提示我们命令行中缺少哪些参数,我们只需要简单地调用。usage()和.demand()方法可以解决问题。toobusy这是一个非常有用的包。它轮询Node事件循环并跟踪完成请求需要多长时间,如果发现延迟太长,toobusy会通知您,以便您可以向客户端返回HTTP503“服务不可用”状态代码.这个处理很重要,因为服务器越忙,请求等待的时间就越长。这很快就会成为一个复杂的问题,并随着时间的推移变得更糟。如果放手,服务就会崩溃。如果我们能够及时停止一些请求的处理并返回HTTP503,至少可以处理一些请求。您可以使用npm命令轻松安装toobusy:npmintaltoobusy,然后将其与Express之类的东西集成:vartoobusy=require('toobusy'),express=require('express');varapp=express();//如果服务器太忙压力太大会阻塞请求=app.listen(3000);process.on('SIGINT',function(){server.close();toobusy.shutdown();//正常退出process.exit();});无需编写太多代码,无需过多配置即可继承到我们自己的项目中。chalk很难在命令行上开发出有用的用户界面,因为只有命令行窗口用于与用户交互。那么如何提示一些重要的信息呢?向输出文本添加格式是一个好方法。快递就是一个典型的例子。从它的输出中,您可以轻松阅读和找到重要信息。以下是chalk支持的样式列表:modifiersboldunderlinedimresethiddeninverseitalic(不支持所有环境)strikethrough(不支持所有环境)colorsredblackgreenwhiteyellowblue(更亮的版本将在Windows上使用,因为普通的蓝色很难看懂)cyangraymagenta背景颜色bgBluebgBlackbgRedbgGreenbgCyanbgYellowbgWhitebgMagenta虽然官方只支持这些颜色,但是任何符合xterm标准的终端都可以使用完整的8位颜色代码。这些文本可以很容易地格式化,只需将字符串传递给函数进行着色或格式化。如果需要让用户注意到严重错误,可以使用以下格式:varchalk=require('chalk');varstr=chalk.red.bold('ERROR:')+chalk.bold('Everythingjustblewup...');console.log(str);node-inspector很难找到好的调试器,尤其是那些具有良好GUI的调试器,node-inspector为您提供了一个WebGUI来帮助调试您的代码。它具有标准调试器的所有功能,如断点、单步执行、退出代码、变量检查等,加上一些不太常用但非常有用的功能,如CPU和堆分析、网络客户端请求检查的能力并实时编辑运行代码。node-inspector但是node-inspector只与Chrome和Opera兼容,因为它使用Blink开发者工具并且与Node.js兼容。我一直严重依赖控制台输出进行调试,这会花费很多时间。使用GUI可以大大节省调试时间。terminal-kit如果你的Node程序需要支持命令行上简单的文本输入输出以外的操作,那么你应该需要terminal-kit。terminal-kit简化了与用户交互的许多事情,使您可以专注于开发程序中的重要内容。终端工具包的主要功能是:文本样式(很像粉笔)编辑屏幕进度条用户输入有很多适用于终端工具包的示例。例如,如果您需要从网络上下载一些东西,您需要向用户显示一个进度条。以下代码用于显示一个虚拟进度条:varterminal=require('terminal-kit').terminal;varprogressBar;varprogress=0;functionupdateProgress(){//生成一个随机进度值progress+=Math.random()/10;progressBar.update(progress);//检查if(progress>=1){setTimeout(function(){terminal('\n');process.exit();},250);}else{setTimeout(updateProgress,100+Math.random()*500);}}progressBar=terminal.progressBar({width:80,title:'Downloadingfile:',eta:true,percent:true});updateProgress();上面的代码会产生如下效果:terminal-kitprogressbarvalidator验证器可以帮你进行一系列常见的字符串验证(eg:邮箱地址、电话号码、IP地址等)。任何时候你从用户那里得到输入,像这样的包都是必不可少的。用户会犯错误并在文本框中键入非常奇怪的内容,因此需要一个验证输入的包来避免数据损坏或服务器崩溃。以下是一些常用的验证器:isEmail(str[,options])isIP(str[,version])isMobilePhone(str,locale)isURL(str[,options])验证器还提供检测器,可以检查输入字符串Normalize,删除或转义。示例包括清理用户提交的内容以防止他们输入恶意的HTML或JavaScript代码。以下是常用的检测器:blacklist(input,chars)escape(input)normalizeEmail(email[,options])whitelist(input,chars)normalizeEmail()method可以保证邮件地址全部为小写字母,甚至可以去掉要忽略的必需字符。假设您有电子邮件abc.def+ghi@163.com,normalizeEmail()会将其规范化为abcdefghi@163.com。formidableformidable可以帮助您处理文件上传的每一步,包括多部分解析器、将文件写入磁盘和错误处理。如果您不想重新发明轮子,这是我最喜欢尝试的包包之一。这是在普通HTTP服务器上使用formidable的示例,代码是根据包本身给出的示例修改的:varhttp=require('http');varutil=require('util');varformidable=require('formidable');varpath=require('path');varPORT=8080;varroot=path.join(__dirname,'../');exports.dir={root:root,lib:root+'/lib',fixture:root+'/test/fixture',tmp:root+'/test/tmp',};varserver=http.createServer(function(req,res){if(req.url=='/'){res.writeHead(200,{'content-type':'text/html'});res.end(''+'>br>'+'
'+''+'');}elseif(req.url=='/post'){varform=newformidable.IncomingForm(),fields=[];form.on('error',function(err){res.writeHead(200,{'content-type':'text/plain'});res.end('error:\n\n'+util.inspect(err));}).on('field',function(field,value){控制台。日志(字段,值);fields.push([field,value]);}).on('end',function(){console.log('->postdone');res.writeHead(200,{'content-type':'text/plain'});res.end('receivedfields:\n\n'+util.inspect(fields));});form.parse(req);}else{res.writeHead(404,{'content-type':'text/plain'});res.end('404');}});server.listen(PORT);console.log('监听http://localhost:'+PORT+'/');shelljsshelljs是一个包,可以让你在任何系统上使用通用的Unix命令,无论是Windows、Linux还是Mac,这样你就不必为你的项目单独编写bash和批处理脚本。shelljs提供了一个类Unix环境,如果你需要编写脚本在服务器上运行测试、提交代码或启动,你只需要编写一次。您可以使用以下命令执行类似操作:require('shelljs/global');ls('*.js').forEach(function(file){sed('-i','BUILD_VERSION','v2.0.3',file);sed('-i',/.*REMOVE_THIS_LINE.*\n/,'',file);sed('-i',/.*REPLACE_THIS_LINE.*\n/,cat('macro.js'),文件);});执行常用命令:require('shelljs/global');mkdir('-p','release/data');cp('-R','data/*','release/data');检查可用的二进制文件:require('shelljs/global');if(!which('git')){echo('Thisscriptrequiresgit!');exit(1);}甚至可以像在bash脚本中运行一样命令如:if(exec('gitcommit-am"Releasecommit"').code!==0){echo('Error:Gitcommitfailed!');exit(1);}