作者:ScottRobinson帮助您处理自行设置的命令行标志和输入的任何类型的数据,包括布尔值、浮点数和字符串。这个包非常简单,不需要您在项目中编写大量样板代码。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:npminstalltoobusy然后将其与Express之类的东西集成:vartoobusy=require('toobusy'),express=require('express');varapp=express();//如果服务器承受压力,将阻止请求app.use(function(req,res,next){if(toobusy()){res.send(503,"Toomanyusers!");}else{next();}});varserver=app.listen(3000);process.on('SIGINT',function(){server.close();toobusy.shutdown();//正常退出process.exit();});不需要写太多代码,不需要太多配置,就可以继承到我们自己的项目中。chalk很难在命令行上开发出有用的用户界面,因为只有命令行窗口用于与用户交互。那么您如何着手提示一些重要信息呢?这是向输出文本添加格式的好方法。快递就是一个典型的例子。从它的输出中,您可以轻松阅读和找到重要信息。以下是chalk支持的样式列表:修饰符boldunderlinedimresethiddeninverseitalic(并非在所有环境中都支持)strikethrough(在任何环境中均不支持)colorsredblackgreenwhiteyellowblue(在Windows上使用更亮的版本,因为纯蓝色难以阅读)cyanraymagenta背景颜色bgBluebgBlackbgRedbgGreenbgCyanbgYellowbgWhitebgMagenta虽然只有这些颜色是官方支持的,任何兼容xterm的终端都可以使用完整的8位颜色代码。这些文本可以很容易地格式化,只需将字符串传递给函数进行着色或格式化。如果需要让用户注意到严重的错误,可以使用如下格式:varchalk=require('chalk');varstr=chalk.red.bold('ERROR:')+chalk.bold('Everythingjust爆炸...');console.log(str);node-inspector好的调试器很难找到,尤其是那些具有良好GUI的调试器,node-inspector为您提供了一个webGUI来帮助调试代码。它具有标准调试器的所有功能,如断点、单步执行、退出代码、变量检查等,加上一些不太常用但非常有用的功能,如CPU和堆分析、网络客户端请求检查的能力并实时编辑运行代码。然而,NodeInspector仅与Chrome和Opera兼容,因为它使用Blink开发者工具并且与Node.js兼容。我一直严重依赖控制台输出进行调试,这会花费很多时间。使用GUI可以大大节省调试时间。terminal-kit如果你的Node程序需要支持命令行上简单的文本输入输出以外的操作,那么你应该需要terminal-kit。terminal-kit简化了与用户交互的许多事情,使您可以专注于开发程序中的重要内容。terminal-kit的主要特点是:文本样式(很像粉笔)编辑屏幕进度条用户输入有很多适合终端工具包的例子。例如,如果您需要从网络上下载一些东西,您需要向用户显示一个进度条。以下代码用于显示虚拟进度条:varterminal=require('terminal-kit').terminal;varprogressBar;varprogress=0;functionupdateProgress(){//生成随机进度值progress+=Math.随机()/10;progressBar.update(进度);//检查是否完成if(progress>=1){setTimeout(function(){terminal('\n');process.exit();},250);}else{setTimeout(updateProgress,100+Math.random()*500);}}progressBar=terminal.progressBar({width:80,title:'下载文件:',eta:true,percent:true});更新进度();上面的代码会产生如下效果:validatorvalidator可以帮你进行一系列常见的字符串验证(例如:邮箱地址、电话号码、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('强大');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('
'+'
'+'
