node.js 定义一个只读不可删除的全局变量

node.js 下如何定义一个只读不能删除的全局变量呢?使用下面的方法:varmongodbClients=require('./lib/common/mongodb_helper');     Object.defineProperty(global, "mongodbClient", {         value: mongodbClients,         writable: false,         configurable: false     });这样就创建了一个 mongodbClient  的全局变量,如何使用的呢?global.

node.js 使用domain模块捕获异步回调中的异常

和其他服务器端语言相比,貌似node.js 对于异常捕捉确实非常困难.首先你会想到try/catch ,但是在使用过程中我们会发现并没有真正将错误控制在try/catch 语句中.为什么?答案是这样的:node.js 是异步IO执行,所以我们将try/catch 反正异步回调函数中,当出现一个异常的时候,我们try 拿到这个错误时应该错过了当前程序运行堆栈,而在node.js原生的uncaughtException 处理事件却挂在 process 对象上,OMG,你可想而知,如果一个异常出现时,当前运行的 process 会直接挂掉,导致错误永远不会走到 catch 语句.所以 try/cat

利用redis 有序集合,轻松搞定排行榜

redis 在nosql阵营可谓是红的发紫,它比其他nosql产品支持的存储类型比较丰富,而且存储方式比较灵活,试用的成本也不高.本文简单描述下 redis 下如何实现一个排行榜,缘由是redis 支持一种 有序集合 zset 类型,zset 是set 类型的一个扩展,比原有的类型多了一个顺序属性.此属性在每次插入数据时会自动调整顺序值,保证value值按照一定顺序连续排列.我们首先插入一些测试数据.zhangzhi@moke:~$redis-cli-h192.168.1.175-p6377我用客户端连接上了 192.168.1.175 服务器的 6377 端口.192.168.1.175:6

node.js 下给字符串生成一个哈希散列值

我们常常对一个拼接的变量进行映射,让一个变量通过一定的算法得出一个可控的结果然后在操作.比如淘宝的分布式存储,淘宝会根据注册用户ID对64取模,结果肯定是小于64的数,就可以根据此数来确定用户信息存储在64台服务器中的哪一台.这里一个前提是会员ID是数值型,如果是字符串怎么办?本文要解决的就是这个问题.思路:给字符串求哈希散列码, 然后对固定数值求模,最后确定该把数据存储到那台服务器上.node.js 下有很多求哈希散列值的模块,本文用到的是fnv-plusgithub 地址:https://github.com/tjwebb/fnv-plus npm 安装模块(这里就省略不说了)使用:var

redis-cli 命令总结

Redis提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些command可以在Linux终端使用。在编程时,比如使用Redis 的Java语言包,这些命令都有对应的方法。下面将Redis提供的命令做一总结。官网命令列表:http://redis.io/commands(英文)1、连接操作相关的命令quit:关闭连接(connection)auth:简单密码认证2、对value操作的命令exists(key):确认一个key是否存在del(key):删除一个keytype(key):返回值的类型keys(pattern):返回满足给定pattern的所有keyrandomk

node.js 下的异步递归 setImmediate 和 process.nextTick 如何使用

node.js 下之前使用的异步递归都是process.nextTick ,但是0.9以后的版本不推荐使用这种递归,取而代之的是setImmediate那么setImmediate 比 process.nextTick 相比有何优势呢?看下面的一段代码.functionforNext(i,end){ if(i>end){ console.log('programisend!'); }else{ console.log('调用递归中......i='+i); process.nextTick(function(){ returnforN

【随笔】博客终于熬过了百度的考核期

由于之前的各种免费云空间不给力,一介布衣 几乎是隔几个月就挂一次.这对于seo是致命的,去年各大搜索引擎收录还是不错的.经历了今年3月份bae云空间的下架独立域名导致一介布衣消失了一段时间,到目前搜狗和搜搜仍然不收录,必应删除了之前的所有收录记录,现刚刚开始重新收录.google收录最完整且保留了一介布衣的所有历史快照,感动ing~~这张图很明显的告诉我们今年3月份由于bae关闭独立域名绑定后,导致一介布衣搜索量直线下滑,4月初迁入阿里云后,服务器稳定,内容一直保持原创更新,搜索量逐渐上升,但是所有的搜索量都不会被立即放出,而是进入了百度的一个考核期,这个时间是漫长且无奈的,大致是1-2个月,

mac OS强大的svn 客户端管理软件 sourcetree

mac OS下一个免费且好用的svn客户端软件,可以在App Store中下载安装.安装好软件后,打开软件拉取服务器端源代码source path 是源代码托管地址.(写入地址后回车会提示输入帐号密码)destination path 是本地源代码存储目录.如果你克隆源代码时遇到了下面的错误:abort: no compatible bindings available:Subversion 1.5.0 or later required, but no bindings were foundSubvertpy 0.7.4 or later required, but not foundPle

express 解析post方式下的json参数

node.js 下最出名的web框架 express ,之前低版本(4.0以下)貌似需要依赖bodyParser 包来解析请求体,Express 3.x和4.x版本的区别 查看此博文了解.后来的版本把bodyParser 继承进去,需要在express 配置项里 user(express.bodyParser({ keepExtensions: true, uploadDir: '/tmp' })) 如下代码:varexpress=require('express'), app=express(); app.configure(function () {    

【随笔】javascript 超越 ruby 稳坐 github 第一把交椅

Github 托管这各式各样的开源项目,编程语言多种多样,当长久以来Ruby语言开发的项目居首.原因是因为Github 本身就是由Ruby 社区诞生出来的,所以长久以来它是Ruby的大本营.逐渐其他语言开发的开源项目也托管过来,久而久之语言种类越来越多,但是从未撼动过Ruby 的地位.但是到目前为止,javascript已经在github上稳坐第一把交椅,我个人认为是这几点因素:(1)如今前端javascript以垄断形式抢占web浏览器,可见前端javascript 工程师一抓一大把.(2)2009年发布至今的node.js 运行在服务器后端环境的javascript,以前得天独厚的web开

用Apache 的 ApacheBench 给web做性能压力测试

ApacheBench 是 Apache 服务器自带的一个web压力测试工具,缩写为 ab ,旨在高压高并发下体现出各种问题和瓶颈.ab 命令会模拟多个用户同时访问一个url (伪装一个并发访问的环境).此命令对本地cpu要求不高,内存要求也不多,但是会对访问目标服务器造成严重的负载甚至资源耗尽而宿机,很类似与cc攻击.使用方法:ab[option][http://]host[:port]/path[option] 是ab 命令提供的N多可选参数-n//requests Number of requests to perform//在测试会话中所执行的请求个数(本次测试总共要访问页面的次数)。

node.js团队 五一期间发布 v0.10.28 和v0.11.13版本

劳动最光荣,热烈庆祝 node.js 团队在五一国际劳动节向大家推出了2个新版本V0.10.28 Source code 下载地址V0.11.13 Source code 下载地址V0.11.13 更新记录v8: upgrade to 3.24.35.22buffer: add compare and equals methods (Sean McArthur)buffer: improve {read,write}{U}Int* methods (Nick Apperson)buffer: return uint if MSB is 1 in readUInt32 (goussardg)bu

【随笔】关于 npm 命令使用的好习惯

有关npm的几个使用习惯,逐渐完善中。。我们开发中经常用到npm来管理第三方包,如果你觉得国外环境下载第三方包不是很快,可以换成国内的npm源,npm换国内源,使用过程也相对简单,本项目私有的包会选择 npm install async ,如果全局共享安装会使用 npm install -g async其实 npm 的实际功能远远超过我们实用的这几招。1.npm 帮你完成package.json 文件,在一个node.js 文件中 package.json 文件的重要性不必多说,如果你还不明白,赶紧google一下。如何完善:mkdirblog cdblog npminit前2句命令是创建项目

控制异步回调利器 - async 串行series,并行parallel,智能控制auto简介

async 作为大名鼎鼎的异步控制流程包,在npmjs.org 排名稳居前五,目前已经逐渐形成node.js下控制异步流程的一个规范.async成为异步编码流程控制的老大哥绝非偶然,它不仅使用方便,文档完善,把你杂乱无章的代码结构化,生辰嵌套的回掉清晰化.async 提供的api包括三个部分:(1)流程控制 常见的几种流程控制.(2)集合处理 异步操作处理集合中的数据.(3)工具类 .github 开源地址:https://github.com/caolan/async安装方法: npm install async使用方法: var async=require('async')

yeoman 安装和使用 - 快速构建web应用 (下)

之前有一篇讲了yeoman 工具安装和简易使用,你可以从这里点击查看 伟大的传送带这一片分享下生成的这个后端web框架什么时候使用?结构包括什么?各部分如何工作?什么时候使用这个框架:当你是个前端,当你专注与某个富客户端应用时,当你需要后端服务器提供数据而你不会或者懒得编写服务器端程序时...本人是在学习angular.js 时,也就是做一个富客户端应用时,后端可能只是根据api获取数据,所以方便快捷的使用了 yeoman 来生成一个web架构.这个架构包括了哪些东西?app 目录是框架的主要目录,包含了静态资源(fonts,images,styles) angular.js 需要提供的视图(

MongoDB数据插入insert和save操作

原始出处:http://jzfjeff.blog.51cto.com/1478834/990699在说MongoDB数据插入操作之前,我们先来简单了解下它的数据逻辑结构.MongoDB的逻辑结构是一种层次结构。主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。文档(document)由键/值对构成,像{a:1};{s:"abc"}等,它是MongoDB核心单元.MongoDB的文档(document),相当于关系数据库中的一行记录。多个文档组成一个集合(collection),相当于关系数据库的表。多个集合(colle

node.js 和其他服务器端语言相比优势在哪?

node.js 是一个服务器端运行JavaScript脚本的环境,这个环境下保持了客户端JavaScript的api一致,并且强制使用单进程单线程模式下工作的方式也与运行在浏览器宿主下的javascript保持一致,看似没有其他服务器端语言的任何优势,错了,上面提到的单进程单线程模式其实就是它的一大优点.单线程+单进程(1)程序大部分api与客户端javascript保持一致(当然服务器端javascript可以随意执行io操作及调用一些系统层面的接口)(2)javascript语言历史悠长,门槛不高,涉及到javascript语言的工程师多如牛毛(3)单线程单进程模式促使程序执行上下文不需要

yeoman 安装和使用 - 快速构建web应用(上)

Yeoman是由Paul Irish、Addy Osmani、Sindre Sorhus、Mickael Daniel、Eric Bidelman和Yeoman社区共同开发的一个项目。它旨在为开发者提供一系列健壮的工具、程序库和工作流,帮助他们快速构建出漂亮、引人注目的Web应用。它不只是一个工具,还是一个工作流。它其实包括了三个部分yo、grunt、bower,分别用于项目的启动、文件操作、包管理。Yo: Yo是一个项目初始化工具,可以生成一套启动某类项目必需的项目文件。Bower: 一个客户端技术的软件包管理器,它可用于搜索、安装和卸载如JavaScript、HTML、C

给电脑换源 npm 国内镜像 cnpm

npm 是node.js 环境下的包管理器,非常强大智能.生活这这片神奇的土地上,各种奇葩手段屡见不鲜啊.为什么要换源? npm 官方站点http://www.npmjs.org/并没有被墙,但是下载第三方依赖包的速度让人着急啊!就拿阿里云环境来说,有时npm 一个包也需要耐心等待......等待过去也许是原地踏步,也许就是安装失败.幸运的是,国内有几个镜像站点可以供我们使用,本人在使用http://www.cnpmjs.org/速度非常快,镜像站会实时更新,为我们节省了好多时间.如何给本机换源呢?(1)通过 config 配置指向国内镜像源npmconfigsetregistryhttp:/

npm install canvas 各种依赖,各种错误 转投npm install ccap 来生成验证码

canvas 模块是npm提供的一个第三方包,国内环境安装慢的话请给npm换国内源,点击查看,用来生成图片.在本博客的应用场景是生成验证码.前端时间阿里云上使用 ubuntu 系统,本地mac OS ,安装 canvas 及各种依赖貌似很顺利,最近从ubuntu 换到了 centOS 后,进过几小时的挣扎,canvas 环境还是没有安装成功!他的依赖很多,最好按照官方wiki提供的文档来安装.wiki文档地址:https://github.com/LearnBoost/node-canvas/wikiwiki 提供的安装向导包括2部分,红框内的为不同操作系统需要安装的依赖. 红框下面是云环境需

NodeJS - Express 3.0下ejs模板使用 partial展现 片段视图

如果你也在看Node.js开发指南,如果你也在一步一步实现 microBlog 项目!也许你会遇到本文提到的问题,如果你用的是Express 3.0本书实例背景是 Express 2.0 而如今升级到 3.0后去掉了一些老的方法也更新了一些新的,所以变化还是蛮大的.首先上一篇博客提到的一个问题:如何用Express 3.0 生成一个 ejs 模板项目前提是你已经下载了ejs包,如何下载,运行cmd 输入 npm install ejs -g2.0 下的语法是:express -t ejs microblog3.0下的语法是:express -e ejs microblog (-t已经失效,取而

mongoskin 学习总结

在node.js环境下使用mongoskin 操作mongoDB .mongoskin 的安装非常简单 npm install mongoskinmongoskin 的使用,上一篇博文已经说过,你可以返回去瞄一眼, 我是伟大的传送带下面的内容针对 mongoskin 操作 mongoDB 的api来说明:查这应该是所有数据库的灵魂,通过简单的api可以帮助我们从海量数据库总准备找到自己想要的数据.查询多条数据原生方法: find()使用: db.集合名.find([option]) [option] 为可选条件,可以空,也可以指定条件,如 {name:'xiaoxiao'}查

node.js 和 mongoskin 通过单体模式连接访问数据库

学习mongoskin时发现获取db对象时应用了单体模式,顺便温习一下.单体模式是设计模式里最简单的一个,也是最实用的一个.单体模式也叫单例模式,有个明显的特征,全局只允许初始化一次,应用场景:银行卡 ,银行系统中的每一张银行卡都是一个单体,全局只允许初始化一次,避免多终端(柜台,ATM,手机银行app,电话银行 )等同时操作存取款时而引起的数据不一致的问题.对于一个引用类型的单体对象,一个进程访问时通常会对此object加锁,保证数据同步,银行系统更要如此.看下mongoskin 连接mongoDB的代码吧.varmongoskin=require('mongoskin');

node.js 解析xml文件 - 为站点添加sitemap

针对前后几次blog不稳定(1)版本问题:从开始asp.net+access 到 php+mysql 到 node+mongoDB 到现在的 node+levelDB ,改版对于搜索引擎是很不友好的,直接导致搜索量下降,甚至被拉黑.(2)服务器问题,偶尔的不稳定或者相应超时,早先淘宝购买的非常便宜的小空间经常出现down机的情况,后来的openshift 被墙后,访问超时,转而投靠到bae下,没想到........目前阿里云服务器下,速度快,服务好,花点银子也比较省心.就是上面的种种原因吧,搜索引擎对本站收录一直不太理想,百度的索引量一直在升,但是搜索结果页明显是之前一版的快照,为啥子不更新呢

mac 如何设备全局变量$PATH

Unix加载环境变量来自3种配置文件.首先加载 /etc/profile 系统全局变量.接着是其他系统配置文件 如/etc/bashrc最后是用户自定义配置文件 ~/.bash_profile前2个是系统级的,针对所有用户,非root用户只有可读权限,修改时需要 sudo 获取root权限.而最后一个是针对当前用户的配置文件,建议修改此文件,如果当前用户目录下没有此文件 ,nano ~/.bash_profile 创建一个.如何给系统设置全局变量?加入你安装了mongoDB ,想在mac中添加mongod (服务端) mongo (客户端) 的全局环境变量.(1)首先找到你的mongoDB安装

node.js 下将汉字写入Buffer时,Buffer长度如何控制?

先来温习下基础知识.一个字节(Byte)占8位(bit)一个英文字母占一个字节,一个汉字占2个字节.请注意,这里有个"坑" ,一个汉字占2个字节的前提是unicode编码,如果是utf-8 编码的时候,一个汉字占用几个字节呢? 翠花,上代码!varfs=require('fs'); var str='一段优雅的文字出现了'; bufstr = new Buffer(str.length2); for(j=0;j<str.length;j++){      bufstr.write(str[j],j2,'utf8'); } console.log(buf

mac 下用 brew 安装mongodb

mac 下安装mongoDB一般俩种方法.(1)下载源码,解压,编译,配置,启动 比较艰难的一种模式.(2)brew install mongodb ,然后就可以悠闲的品一口茶,顺便瞄一眼网易新闻,这是一种傻瓜模式.但傻瓜模式也有人为干预的时候,粗略说一下使用brew 安装mongodbzhangzhi@moke:~/code$ brew install mongodb此图说明已经安装成功,安装的目录就是 /usr/local/Cellar/mongodb/2.4.9第一次启动服务端,这里需要做一些准备工作.1.默认mongodb 数据文件是放到根目录 data/db 文件夹下,如果没有这个文

回到顶部