当前位置:K88软件开发文章中心办公应用办公应用21 → 文章内容

我在阅读NodeJS文档中读出的19个套路

减小字体 增大字体 作者:华军  来源:华军资讯  发布时间:2019-3-10 1:05:18

虽然我已经用了三年多的NodeJS,也曾经以为自己对其无所不知。但是我好像从未有安静的坐下来仔细地阅读NodeJS的完整文档。如果有熟悉我的朋友应该知道,我之前已经看了HTML,DOM,Web APIs,CSS,SVG以及ECMAScript的文档,NodeJS是我这个系列的最后一个待翻阅的山峰。在阅读文档的过程中我也发现了很多本来不知道的知识,我觉得我有必要分享给大家。不过文档更多的是平铺直叙,因此我也以阅读的顺序列举出我觉得需要了解的点。querystring:可以用作通用解析器的模块很多时候我们会从数据库或其他地方得到这种奇怪格式的字符串:name:Sophie;shape:fox;condition:new,一般来说我们会利用字符串切割的方式来讲字符串划分到JavaScript Object。不过querystring也是个不错的现成的工具:V8 Inspector以--inspect参数运行你的Node应用程序,它会反馈你某个URL。将该URL复制到Chrome中并打开,你就可以使用Chrome DevTools来调试你的Node应用程序啦。详细的实验可以参考这篇文章。不过需要注意的是,该参数仍然属于实验性质。nextTick 与 setImmediate的区别这两货的区别可能光从名字上还看不出来,我觉得应该给它们取个别名:再说句不相关的,React中的Props应该为stuffThatShouldStayTheSameIfTheUserRefreshes,而State应该为stuffThatShouldBeForgottenIfTheUserRefreshes。Server.listen 可以使用Object作为参数我更喜欢命名参数的方式调用函数,这样相较于仅按照顺序的无命名参数法会更直观。别忘了Server.listen也可以使用某个Object作为参数:不过这个特性不是表述在http.Server这个API中,而是在其父级net.Server的文档中。相对地址你传入fs模块的距离可以是相对地址,即相对于process.cwd()。估计有些人早就知道了,不过我之前一直以为是只能使用绝对地址:Path Parsing:路径解析之前我一直不知道的某个功能就是从某个文件名中解析出路径,文件名,文件扩展等等:Logging with colors别忘了console.dir(obj,{colors:true})能够以不同的色彩打印出键与值,这一点会大大增加日志的可读性。使用setInterval执行定时任务我喜欢使用setInterval来定期执行数据库清理任务,不过默认情况下在存在setInterval的时候NodeJS并不会退出,你可以使用如下的方法让Node沉睡:如果你尝试在NodeJS中杀死某个进程,估计你用过如下语法:这个没啥问题,不过既然第二个参数同时能够使用字符串与整形变量,那么还不如使用全局变量呢:IP Address ValidationNodeJS中含有内置的IP地址校验工具,这一点可以免得你写额外的正则表达式:os.EOF不知道你有没有手写过行结束符,看上去可不漂亮啊。NodeJS内置了os.EOF,其在Windows下是rn,其他地方是n,使用os.EOL能够让你的代码在不同的操作系统上保证一致性:HTTP 状态码NodeJS帮我们内置了HTTP状态码及其描述,也就是http.STATUS_CODES,键为状态值,值为描述:你可以按照如下方法使用:避免异常崩溃有时候碰到如下这种导致服务端崩溃的情况还是挺无奈的:我为了避免这种情况,在全局加上了一个:当然,这种办法绝不是最佳实践,如果是在大型项目中我还是会使用PM2,然后将所有可能崩溃的代码加入到try...catch中。Just this once()除了on方法,once方法也适用于所有的EventEmitters,希望我不是最后才知道这个的:Custom Console你可以使用new console.Console(standardOut,errorOut),然后设置自定义的输出流。你可以选择创建console将数据输出到文件或者Socket或者第三方中。DNS lookup某个年轻人告诉我,Node并不会缓存DNS查询信息,因此你在使用URL之后要等个几毫秒才能获取到数据。不过其实你可以使用dns.lookup()来缓存数据:fs 在不同OS上有一定差异net 模块差不多比http快上两倍笔者在文档中看到一些关于二者性能的讨论,还特地运行了两个服务器来进行真实比较。结果来看http.Server大概每秒可以接入3400个请求,而net.Server可以接入大概5500个请求。REPL tricks

我在阅读NodeJS文档中读出的19个套路