Node.js项目APM监控之New Relic

现在上一个项目,如果没有APM监控服务或应用的运行性能参数,等于是一架没有盲降系统的飞机正在盲降,结果会很悲催。出现了访问失效等问题时,都很难判定是性能瓶颈还是一个藏的深的bug,汇报的时候一顿眼晕,这样的结果肯定是要被人分分钟的各种撕。目前还没有像样的给node.js项目应用的APM开源项目,暂且先羡慕嫉妒下给java用的PinPoint。不用开源的就用专业的APM提供商的产品,先解决问题,国内有很多专业提供商,也是不错。国外的NewRelic也是被推荐的一家,集成进node.js特别方便,监控功能齐全。 创建APM监控要使用的话,首先是去首页注册一个账户,注册完后就会显示一个“GetstartedwithNewRelic”页面,在里面选择node.js。然后按照页面上的步骤一步一步配置。 主要过程:1.记下分配给你的licensekey。2.在项目中安装newrelic库。npminstallnewrelic--save3.将node_modules/newrelic下的newrelic.js复制到项目的根目录下,也就是和node_modules同级。4.配置n...

angular.js测试框架protracotr自带的webdriver-manager启动问题“Invalid or corrupt jarfile”

按照官网安装完protractor。升级webdriver-manager,获取selenium-server-standalone库文件以及各种浏览器驱动文件。webdriver-managerupdate升级后运行命令启动webdriver-manager以便提供浏览器模拟服务。webdriver-managerstart运行后会出现错误“Error:Invalidorcorruptjarfile”。原因应该是文件下载的不完整或者文件错误。可以把“selenium-server-standalone-2.53.1.jar”手动删除,用vpn/代理再次执行“webdriver-managerupdate”,如果update的时候,在控制台里看到有error信息的话,那么还要重新下载,换个vpn或网络再试试。 END...

angular.js测试框架protracotr安装所需的node版本

protractor内代码的语法是基于ES6的,比如:里面用到了展开运算符“...”,node.js6.0以下是不支持该语法特性。所以,安装protractor是不会报错,但运行webdriver-manager的升级就会报那三个点无法识别。 需要将node.js升级到6.0+就能解决该问题。 protractor参考 END ...

windows下通过Chocolatey安装或升级node.js

以管理员身份运行windowsPowerShell并安装Chocolatey我的机器是windows10,可以在开始菜单->所有应用->W栏中找到WindowPowerShell并运行。在命令行中运行命令:iwrhttps://chocolatey.org/install.ps1-UseBasicParsing|iex等待安装完成,默认会安装最新版。安装后运行命令确认:C:WINDOWSsystem32>choco我这里得到的版本回复:Chocolateyv0.10.3确认安装完成。安装参考 搜索node.js版本chocosearchnode.js可以列出相关的资源。 升级node.js到最新版本chocoupgradenodejs 升级node.js到指定版本chocoupgradenodejs-version7.3.0 chocolatey用起来倒还算方便,但安装包还是少了点,各软件也不是全版本都在上面。 END ...

node.js中使用https请求报CERT_UNTRUSTED的问题解决

只要调用了没有受信的https就会报错:CERT_UNTRUSTED简单的解决方法就是设置环境变量回避非授信证书的问题。只要在请求的代码之前加上如下代码即可:process.env.NODE_TLS_REJECT_UNAUTHORIZED="0"; END ...

node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查

Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),。它当前支持MySQL,、MariaDB、SQLite、PostgreSQL、SqlServer数据库。目前在Node.js中,Sequelize的关注度较高,用的也较多。因为是基于promise规范,在调用后的处理上不再是callback方式,而是统一的链式调用方式,调用直观,易读。那么就先用起来吧,虽然还有很多坑,但互联网上开源的东西有哪个是让人特别省心的呢,是个好东西就用吧,碰到坑也只能用人肉去填了,(^-^)。 安装建个工程文件夹,并进入,在命令行中运行安装sequelize命令。npminstallsequelize安装mysqlnpminstallmysql 创建sequelize对象在代码顶部先要把sequelize库require进来。第一个参数'test1'是数据库名。第二个参数'root'是登录用户名。第三个参数'123456'是登录用户对应的密码。第四个参数:h...

package.json for npm中依赖外部组件时常用的版本符号含义

package.json中会有dependencies定义了项目依赖的外部组件,这些外部组件的依赖都是带有版本符号以表示被依赖组件的版本范围。{"dependencies":{"foo":"1.0.0-2.9999.9999","bar":">=1.0.2<2.1.2","baz":">1.0.2<=2.3.4","boo":"2.0.1","qux":"<1.0.0||>=2.3.1<2.4.5||>=2.5.2<3.0.0","asd":"http://asdf.com/asdf.tar.gz","til":"~1.2","elf":"~1.2.3","two":"2.x","thr":"3.3.x","lat":"latest","dyl":"file:../dyl"}}项目中往往会依赖很多的外部组件,而这些组件都是开源,使用开源的组件时首先要注意的就是它的版本,版本号的差异会造成功能上的很大偏差,搞明白npm中版本符号的含义就是使用组件的基础,npm中的版本符号就是限定版本范围的符号。 版本的格式major.min...

解决在IE中获取数据的缓存问题,运行环境为node.js

IE下默认会开启缓存策略,不管是页面还是通过ajax请求的数据都会议一个url,url是uri(统一资源定位符)的实例,url就是资源的标识符。写一个demo进行验证,测试环境:IE8,node.js0.12.7,页面模板为jade。 页面代码:testCache.jade页面上放一个按钮,点下后从后台获取一个自增的数值显示在按钮上。doctypehtmlhtmlheadmeta(charset='utf-8')title=titlescript(src='/js/jquery-1.10.2.min.js')script(src="/js/bootstrap.min.js")bodybutton(id='btnTest',type='button',class='btnbtn-defaultgap')测试script.$(document).ready(function(){$('#btnTest').click(doTest);});functiondoTest(){$.ajax({type:'GET',url:'/cache/data',data:'',dataType:...

node.js下LDAP查询实践

目标:从一个LDAPServer获取uid=kxh的用户数据LDAP地址为:ldap://10.233.21.116:389 在工程根目录中,先npm一个LDAP的访问库ldpajsnpminstallldapjs在工程根目录中,创建一个app.jsvarldap=require("ldapjs");//创建LDAPclient,把服务器url传入varclient=ldap.createClient({url:'ldap://10.203.24.216:389'});//创建LDAP查询选项//filter的作用就是相当于SQL的条件varopts={filter:'(uid=kxh)',//查询条件过滤器,查找uid=kxh的用户节点scope:'sub',//查询范围timeLimit:500//查询超时};//将client绑定LDAPServer//第一个参数:是用户,必须是从根节点到用户节点的全路径//第二个参数:用户密码client.bind('uid=supbind,cn=users,dc=tiger,dc=com','123456',function(err...
代码星球 代码星球·2021-02-25

使用nodejs+express(4.x+)实现文件上传

最简单的做法是通过“connect-multiparty”中间件实现上传。通过在项目中npminstallconnect-multiparty进行安装。 用法:varmultipart=require('connect-multiparty');varmultipartMiddleware=multipart();app.post('/upload',multipartMiddleware,function(req,resp){console.log(req.body,req.files);//don'tforgettodeleteallreq.fileswhendone});上传后,上传的文件会在临时目录中生成一个临时文件,具体可将req.files打印出查看具体文件路径。只要在注释的地方将临时文件移动并重命名到实际目录中即可完成上传功能。简单。官方地址:https://www.npmjs.com/package/connect-multiparty 但是官方不建议使用该中间件,建议直接使用“multiparty”,因为错误处理比较麻烦。 下面就用“mu...

使用archiver在nodejs下打包

 archiver是一个在nodejs中能跨平台实现打包功能的模块,可以打zip和tar包,是一个比较好用的三方模块。使用前先安装archiver模块。npminstallarchiver建立一段代码vararchiver=require('archiver');varfs=require('fs');//被打包文件varfiles=['files/001.png','files/002.png'];varzipPath='test.zip';//创建一最终打包文件的输出流varoutput=fs.createWriteStream(zipPath);//生成archiver对象,打包类型为zipvarzipArchiver=archiver('zip');//将打包对象与输出流关联zipArchiver.pipe(output);for(vari=0;i<files.length;i++){console.log(files[i]);//将被打包文件的流添加进archiver对象中zipArchiver.append(fs.createReadStream(files...

node.js下when.js(Promises/A)的实践

假设一个业务场景:通过rss地址,获取rss并保存于文件,rss地址保存于文件中。完成该场景的业务需要完成3个任务:1.从文件中读取rss地址。2.获取rss。3.保存于文件。最后将这三个任务进行整合。 准备:存放rss地址的文件,address.txt。http://programmer.csdn.net/rss_programmer.html 任务1:读取rss地址文件的内容并通过callback返回。vargetRssAddress=function(path,callback){fs.readFile(path,{encoding:'utf8'},function(err,data){callback(err,data);});} 任务2: 通过rss地址get到rss,并通过callback返回错误或数据。vargetRss=function(url,callback){vardata='';http.get(url,function(res){res.on('data',function(chrunk){data+=chrunk;})...

setTimeout,setInterval,process.nextTick,setImmediate in Nodejs

 Nodejs的特点是事件驱动,异步I/O产生的高并发,产生此特点的引擎是事件循环,事件被分门别类地归到对应的事件观察者上,比如idle观察者,定时器观察者,I/O观察者等等,事件循环每次循环称为Tick,每次Tick按照先后顺序从事件观察者中取出事件进行处理。 调用setTimeout()或setInterval()时创建的计时器会被放入定时器观察者内部的红黑树中,每次Tick时,会从该红黑树中检查定时器是否超过定时时间,超过的话,就立即执行对应的回调函数。setTimeout()和setInterval()都是当定时器使用,他们的区别在于后者是重复触发,而且由于时间设的过短会造成前一次触发后的处理刚完成后一次就紧接着触发。 由于定时器是超时触发,这会导致触发精确度降低,比如用setTimeout设定的超时时间是5秒,当事件循环在第4秒循到了一个任务,它的执行时间3秒的话,那么setTimeout的回调函数就会过期2秒执行,这就是造成精度降低的原因。并且由于采用红黑树和迭代的方式保存定时器和判断触发,较为浪费性能。 使用process.next...

nodejs中exports与module.exports的实践

只要是在nodejs中写自己的文件模块就少不了会遇到module.exports和exports的使用,看别人的代码大多都会使用“module.exports=exports=<对象/函数等>”怪异的串联用法,一问原因,貌似都是云里雾里,如此写法更像是保守的防止性写法。这种问题除了看源代码外,只能写点代码进行求证。写了两个模块文件,provider.js产生任意类型的对象, customer.js返回并输出provider对象。第一种情况:provider.js,直接在exports上设置任意类型的对象。exports={name:'kxh'}/*exports=function(){console.log('kxh');};exports='kxh';*/console.log('*******provider-module***********');console.log(module);console.log('*******provider-exports***********');console.log(exports);customer.jsvarp=...

什么是vue.js中的自定义指令?

问题一:什么是vue.js中的自定义指令?自定义一些指令对底层DOM进行操作更多参考Vue里面有许多内置的指令,比如v-if和v-show,这些丰富的指令能满足我们的绝大部分业务需求,不过在需要一些特殊功能时,我们仍然希望对DOM进行底层的操作,这时就要用到自定义指令。问题二:自定义指令的几个钩子函数bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。inserted:被绑定元素插入父节点时调用(仅保证父节点存在,但不一定已被插入文档中)。update:所在组件的VNode更新时调用,但是可能发生在其子VNode更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新。componentUpdated:指令所在组件的VNode及其子VNode全部更新后调用。unbind:只调用一次,指令与元素解绑时调用。问题三:钩子函数参数除了el之外,其它参数都应该是只读的,切勿进行修改。如果需要在钩子之间共享数据,建议通过元素的dataset来进行。指令钩子函数会被传入以下参数:el:指令所绑定的元素,可以用来直接操作DOM...
首页上一页...7891011...下一页尾页