




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、给Node.js新手的7个建议技巧一些我更愿意在开始就知道东西利用Node.js开发是一个非常有趣,和令人满足的过程,他有3万多个模块可以选择使用,并且所有的模块可以非常容易的集成入现有的应用之中。无论如何,对于一些刚开始使用 Node.js开发的的人来说,很容易碰壁,在这 个文章中,我会提到在你学习过程中遇到的问题。贴士 1:在开发环境使用nodemon,在生产环境使用pm2当你第一次开发Node.js应用的时候,其中一件事情就是一次又一次的运行file.js就和揭伤疤一样。当我第一次开发的node app时候,这个让我感到异常挫败和痛苦,尤其是每当我修改很小东西的时候需要con trol+
2、c幸运的是我发现了一个非常棒的工具 Nodemon.你可以利用以下的命令来安装。 npm in stall - g no dem onNodemon是一个令人惊叹的工具,当你全局安装他以后,可以通过nodemonfile.js来启动你的node.js scripts,它会告诉nodemon来监视你的script和scripts的所有变化,这样的Node.js开发方式非常震撼以及让大大提高 开发速度。那么,生产环境又如何,除非你用了heroku,Nodejitsu或者其他一些好的Node.js平台(也许他们有类似的功能),但是碰巧你用了 EC2或者一些其他的 云平台来运行你的Node.js ap
3、p,你如何能然保证这是一个始终运行的Node.jsapp ?案就是PM2, PM2是一个类似于Nodemon的工具,不同之处在于它用于生产 环境,和Nodem on相似的地方在于他会监控你的app的任何修改或者重新部署, 但是有更好的一面, PM2在遭遇到崩溃的时候,他会正确重启你的 app.PM2的优胜之处在于当你要将app需要多核处理的时候,PM2内部集成的负载 均衡可以让你很容易的去指定运行多少个实例。pm2 start app . js - i max-i参数目的是指定运行多少个实例,在这个例子中PM2使用了一个常量max来扩展你的app运转到你最大的核数,不要忘记 Node平时只会运
4、行在单核!贴士 2: Async或者Q当你专注于写了更多的node.js apps的时候,你肯定领略了什么是回调地狱。如果你还不知道,这里有一个例子:fun cti on register (n ame password ,cb)checklfNameExists(name function (err , result )if (err )return cb( error ” );checklfPasswordGood ( password , function ( err , result )if (err )return cb( error ” );createAccount (name,
5、 password , function (err , result )if (err )return cb( error ” );createBlog (name, function (err , result )sendEmail ( name function (err , result ) callback (result ););););););这显然不是一个有用或者令人折服的代码,反而进入一种回调地狱般两难的境地,是你的话将如何避免?一个简单的办法是使用events,但是我个人不建议这么做,因为使用 events来 调用只有一个用途的私有方法,足以令人受挫。所以你该怎么做?这里有两
6、个编 译好的模块async.js 和Q他们两个都可以防止落入回调地狱。Async.js或者 async让你可以容易的执行一些连续或者平行的任务,在不依赖一个又一个的嵌套循环前提下.下面是一些来自Async的readme ,写明了他支持的模式,如需获取全部的支持方式请去他们的github主页查看。async . map( filel, file2 , file3 , fs.stat, function(err, results)/ results is now an array of stats for each file);async.filter( file1 , file2 , file3
7、 , fs . exists , function (results )/ results now equals an array of the existing files);async . parallel (function (),function (),callback );async . series (function (),function ();async . waterfall (function ( callback )callback (null , bne , two );,function (arg1 , arg2 , callback )callback (null
8、 , three );,function ( arg1 , callback )/ arg1 now equals three callback (null , done);,function (err , result )/ result now equals done);如果我们用async的waterfall来修改之前的例子,结果将更加容易阅读,再也不 用让你的代码看起来像一个死亡金字塔.另一个重要的库叫做Q.这个库是一个暴漏promises的概念,Promise是一个 含有promise方法的返回对象,他提供了一个最终的返回值,非常优雅的将 javascripts的异步和node.js
9、紧密联系在一起。promiseMeSomething ().then (function (value ), function (reason );这个promise me方法正确返回了一个对象,对象将在传入 value的时候调用 这个方法当,并且他提供了一个额外的callback来处理失败后的返回值。这是一个非常有条理的方式来避免回调地狱,如果你重写我们之前的那个例子, 你可以非常容易的让这些函数正确被调用并执行。就和我之前说的一样,我很不愿创建只有一个用途的一堆功能,相反的在then 之后传入一个方法名,仅仅创建了一个匿名的内部功能和传递,当然了选择权始终在你手里。总的来说,当你落入回调地
10、狱的时候,是时候去看看async.js或者Q吧。我的选择?当然是Q贴士 3:轻松调试Node.js apps如果你从一个IDE重度集成的语言比如java或者C#转来调试Node.js,,你一 定会感到很困扰,大部分新加入node的开发者采用了 floW勺调试模式,从这一 刻开始你最好的朋友就是con sole.log但是依然有更常见的调试方式来代替,Node.js内置了一个调试器你可以称为node debug,不过我更喜欢的 node-inspector他们的 github 说 “Node Inspector 是一个使用 Blink Developer Tools (以前称为 WebKit W
11、eb Inspector)node.js 调试器的界面,”简而言之,n ode-i nspector可以让你用任何你想用的编辑器和chrome webtools来调试你的应用,这是多么的性感。Node-inspector可以让你做一些非常酷的事情,比如实时修改,单步调试,注入以 及一堆其他非常酷的东西。让我们来根据指示一步一步安装。贴士 4: Nodefly一旦你有你的应用程序正常运行, 你可能会问自己,你怎么可以监视它的性能和 配置文件,以确保您的应用程序运行在最佳的速度。 最简单的答案是一个伟大的 服务,我称为Nodefly。用简单的一行代码Nodefly开始监视你的应用程序内存泄漏,测量
12、 redis用了多 久,mon go查询和一堆其他很酷的东西。贴士 5:利用NPM进行模块管理Node做最常见的事情之一是通过 NPM安装软件包。Node有一个惊人的包管理 器安装所有指定在你的package.json 的manifest文件中的模块。然而,所有 初学者都会碰上保持的package.js on 文件中您所使用的所有的模块都是最新 版。这似乎是一个痛苦的过程,总是打开的package.json 来更新新模块的依赖,但 许多人不知道的是npm会为你做这个!非常简单运行 npm in stall - save module_ name然后 npm将自动更新你的package.jso
13、n 包含正确的模块和版本。npm in stall - save module_ name 贴士 6:不要检查node_modules文件夹虽然我们的话题一直是 modules和npm,但是并不是不是很多人都知道,你不 应该提交node_modules文件夹。这背后最大的原因是,没有必要提交这个文件 夹。只要有人下载你的代码,他们可通过运行NPM来安装和下载所有需要的模块。您可能会说,它是不是一个大问题,如果检查 node_modules,但是,如果下载 代码的人使用了和你编译 modules不一样的操作系统的来安装通过 NPM ?你的 应用程序将会崩溃,下载代码的人将不知道为什么会如此!举个例子bcrypt以及sentimental如果当在您安装在主机系统上编译他们,因为他们用了本地C语言组件来编译。避免检查node_modules文件夹的方式是加入.gitignore/ .gitig noreno de_modules/*贴士 7:别忘记返回初学者经常犯一个很常识的错误,就是忘记callback后的返回值,虽然有些时候, 这没有影响,有很多时候,你会遇到奇怪的问题,因为你的回调被调用两次。让我们看一个简单的例子functiondo(err , result , callback )if (err )c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 主-肺动脉隔缺损的临床护理
- 浙江省衢州市五校联盟2024-2025学年高二下学期期中联考技术试题(含答案)
- 帛琉旅游住宿太平洋度假村风景秀丽
- 网上研修学习心得体会模版
- 建筑材料与人居环境
- 安保试用期总结转正工作总结模版
- 造口病人自我护理
- 高二英语下学期期末总结模版
- 肺炎疫苗接种后高烧护理常规
- 发力新质生产力赛道
- 2024年四川省巴中市中考文科综合试卷(含答案解析)
- 欠款抵车的协议书范本
- 设备购买合同模板示例
- 基于JAVA的宠物管理系统实现毕业论文
- 2024年小区地下车位租赁合同
- 2022-2023学年上海市闵行区八年级(下)期末数学试卷
- 专题03 陕西省(A卷)-2022-2023年各地中考英语听力真题合集(含听力原文及MP3)
- 诺如病毒校园防控知识
- 常见神经系统疾病康复15节
- 关于梳理、修订、完善公司规章制度的通知
- 会计信息考试系统复习题(试题及答案)
评论
0/150
提交评论