那些曾经被我们误解的异步IO

又有一周没有写博客了,这样下去会变成荒地的,所以在睡觉之前必须要发一篇,本想把angular.js 系列接下去.....但是最近的 angular.js 用到快吐血,暂时不想再提,上手是熟练了,但是感觉长进不大,项目催的太急,空闲的时间少之又少,就连这篇博客都是从看电影的时间里抽出来的,我又堕落了,阿门!熟悉 node.js 的朋友应该不陌生它身上牛逼闪闪的几个"大字" ,什么 '单线程' , '非阻塞' ,' 异步IO' ,'事件轮询' ,'高并发' 等等.......确实很牛,但是最近我发现

一个方法让node.js 自动加载某个目录的代码(省去require引用)

在写node.js引用的时候,常常面临下面的一个困扰...不论是数据层,逻辑层,添加一个js文件或者暴露一个方法,当你想用的时候,在目标页必须 request 此文件才能使用被暴露的方法.我们是不是可以写一个方法,自动加载某个指定文件夹下的js文件呢?答案是肯定的.这样的好处:我只需要引用这个装载文件后(自动加载目录js 的代码文件) 以后随便你添加方法或者文件,都不影响之前的代码,从而就可以直接使用,是不是很爽....下面来完成这个一劳永逸的代码文件.varfs=require('fs'); var path = __dirname; var self = __filenam

node.js 代码实现301跳转

之前专门有一篇博客介绍 nginx 设置不带www域名跳转带www域名上为什么要这要做,可以从上面的博客得知原因.后来还有一篇是介绍关于主域在搜索引擎中权重更高 ,所以博客经过一段时间不带www域名跳转带www域名后,又相反的从带www跳转到不带www域名,只是因为主域权重更高,不想分流而已.再后来还做了一件事,就是伪静态化,所以在我的博客就算翻页你也会看到url 是这样的 http://yijiebuyi.com/2.html 但是会出现一个问题,之前被搜索引擎收录的url跳转过来服务器找不到自然会报错.所以博客的路由做了调整,兼容之前的老路由,同时支持新路由.这样又导致一个问题,就是一篇博

mac环境下node.js和phonegap/cordova创建ios和android应用

引用百度百科的一段描述:PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台。它使开发者能够利用iPhone,Android,Palm,Symbian,WP7,WP8,Bada和Blackberry智能手机的核心功能——包括地理定位,加速器,联系人,声音和振动等,此外PhoneGap拥有丰富的插件,可以调用. 查看更多使用前提:已经安装xcode已经安装python 2.7 (3.0一下版本)已经安装node 0.10.*(本环境是 0.10.28)上面的安装方法你可以在本博客搜索cordova和phonegap是什么关系?PhoneG

node.js 下依赖Express 实现post 4种方式提交参数

上面这个图好有意思啊,哈哈, v8威武啊....在2014年的最后一天和大家分享关于node.js 如何提交4种格式的post数据.上上一篇说到了关于http协议里定义的4种常见数据的post方法,详细介绍请点击查看.分别是这四种:www-form-urlencoded,form-data,application/json,text/xmlExpress 依赖 bodyParser 对请求的包体进行解析,默认支持:application/json, application/x-www-form-urlencoded, multipart/form-data.可惜对xml没有支持,需要自己代码来

node.js AES/ECB/PKCS5Padding 与其他语言的加密解密通用

关于什么是AES? 需要自己goole了解一下,今天就是简单和大家分享node.js下使用AES/ECB/PKCS5Padding 如何与其他语言通用加密解密.就像你的接口是node.js提供服务,而第三方平台是其他服务器端语言开发,比如php ,在第三方平台请求你的接口可能需要sign验证,假设我们使用了AES/ECB/PKCS5Padding 加密.AES/ECB/PKCS5Padding 斜线分隔的3部分分别是 算法/模式/填充量AES加密包括不同的模式,已经后面是否有填充量(为什么有填充量,就像我们引用的图片,一个AES块是16个字节,如果不满16的时候要不要填充?)算法/模式/填充

node.js里面的全局变量

在node.js开发中,你一定用到过 console 类来打印一些东西或者debug.但是你在使用console类之前一定没有require 相关的包.有的人会说,console 是node.js核心自带模块,不需要require ,错了,这里容易理解错.核心代码库是你安装node.js时已经包含了并编译了此模块.核心模块定义在node源代码的lib/目录下.但是用的时候还是要require 一下.比如上一篇博文提到的node.js里querystring类的使用,这个就是核心代码库自带的,但是你用的时候还是要require('querystring');而我们常常拿来直接就用

node.js querystring类介绍

从名字就可以看出是一个和参数相关的帮助类,node.js原生自带,直接 require('querystring') 即可使用.此类一共包括4个方法:querystring.stringify(obj, [sep], [eq])querystring.parse(str, [sep], [eq], [options])querystring.escape querystring.unescape [内参数]表示可选参数, [sep]指分隔符 默认& , [eq]指分配符 默认=下面一个一个来介绍:一:querystring.stringify(obj,[sep],[e

关于node.js 验证 Oauth1.0 接口

下面的node.js调用Oauth接口并不是针对 腾讯开放平台.....具体不同的服务商可能在 oauth 基础上添砖加瓦,还要考虑具体的业务需求.相比Oauth2.0来说,Oauth1.0真的很繁琐......但是实际应用中碰到这个问题只能去解决,而不可能给对方打电话说,你赶紧把Oauth协议升级到2.0吧,1.0太繁琐,你想想将会发生什么事情 $#(+)&*@!!常常涉及到三方:Service Provider:服务提供者(如 腾讯,只是假设)Consumer:消费⽅,外部第三⽅方平台(如 一介布衣)User:用户 (登录用户)当然我的博客不是多用户博客,只是举例.前提条件:在服务

async和eventproxy在流程控制上哪个更优秀

由于node.js特性异步IO,导致 node.js 开发常常让你头疼的是异步嵌套回调.一层一层的大括号嵌套让你当场就迷失在回调函数中,更不用说隔一段时间自己去维护这段代码的时候,恨不能砸显示器来泄愤.不过这个世界还是美好的,你遇到的问题大家也都遇到了,而且大牛们致力于减轻码农的各种node.js 的痛苦,开发出了高效好用的流程控制包,让你的逻辑变的清晰,维护起来一目了然.常用的有 async ,step ,eventproxystep本人接触很少,一直在用async,也是最近注意到了 eventproxy ,我想看看哪个性能更优,代码更加优雅,所以有了下面一个小demo.这个demo不去比较

request 模拟post提交表单

node.js环境下,利用request 模拟post提交表单 需要 formstream 插件配合使用.npminstallrequestformstreamvarrequest=require('request') ,FormStream=require('formstream') var form = FormStream()   .field('name', '一介布衣')   .file('head_image', '100x100.png') var upload = request.post('http://yijiebuyi.com/page',

Express 3.x升级到4.x 优缺点

Express 是Node.js Web应用框架,他集成了一整套完善的api,让您能够快速搭建一套Web应用.安装Expressnpminstall-gexpress创建一个启动文件 index.jsvarexpress=require('express'); varapp=express(); app.listen(8000);nodeindex.js既可以成功运行起来应用创建一个路由app.get('/',function(request,response){ response.send("HelloWorld!"); });Expres

node.js cookie 操作

cookie是保存着http头信息中的.所以最原生的方法就是通过node.js的原生方法setHeader来设置.response.setHeader(name, value)方法接收key,value键值对获取 header 里面设置的值通过另外一个方法:response.getHeader(name)根据name 获取 value如下:设置cookieresponse.setHeader("Cookie", ["type=user", "name=一介布衣"]);获取cookieresponse.getHeader("C

AngularJS双向绑定 - 免费入门教程

angular.js快速开始在这一步你会增加一个让用户控制手机列表显示顺序的特性。动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情。请重置工作目录:git checkout -f step-4你应该发现除了搜索框之外,你的应用多了一个下来菜单,它可以允许控制电话排列的顺序。步骤3和步骤4之间最重要的不同在下面列出。你可以在GitHub里看到完整的差别。模板app/index.htmlSearch:<inputng-model="query"> Sortby: <selectng-model="orde

Error: invalid csrf token

当你的Express 升级到4.0+版本后,有没有遇到过下面这个问题.{ [Error:invalidcsrftoken] expose:true, code:'EBADCSRFTOKEN', statusCode:403, status:403 }上面的错误是在node.js 运行环境的命令行报出来的.页面直接返回了500服务器错误.我执行了什么操作?这是我的一个新站 三思悦 ,此站有个功能是邀请注册,不对外公开注册的.所以管理后台有个页面用来显示 邀请码,同时有个按钮,用来生成验证码,一次生成唯一不重复的50个.所以这个页面对应2个相同的url ,只不过get方式用来呈现为

node.js 用函数实现 setTimeout 的效果

程序中常常有回到一种需求"等一等",就是让当前线程延时等待一下.之前发过一个帖子就是关于 node.js定时器setTimeout(function(){//实现内容},时间值)确实可以起到这样的效果,用起来也非常方便,匿名函数里是你的逻辑实现,后面的时间值是多少毫秒.我们可以自己实现一个方法来模拟setTimeout 函数functionmySetTimeout(ms){ varcurrentTime=newDate().getTime(); while(newDate().getTime()<currentTime+ms); }如何使用:console.log(&

node.js使用mocha自动化测试程序

之前有过一篇比较简单的关于 mocha 做自动化测试的帖子, mocha测试今天稍晚详细点说下.常见的开源项目你都会发现test目录,当然我们自己创建的项目建议也加上此目录,在这个目录下做自动化测试.目前node.js下做自动化测试的工具也很多,今天我们主要来介绍下如何使用mocha进行自动化测试.安装 mochanpminstall-gmocha这样你就可以创建测试脚本了,如下:varassert=require("assert"); describe('Array',function(){ describe('#indexOf()',fu

node.js自动化测试断言包assert的方法说明

Assent 断言模板包含如下方法:assert.fail(actual, expected, message, operator)assert.ok(value, [message])assert.equal(actual, expected, [message])assert.notEqual(actual, expected, [message])assert.deepEqual(actual, expected, [message])assert.notDeepEqual(actual, expected, [message])assert.strictEqual(actual, ex

ejs母版页让你的node.js应用开发更快更有效- 一介布衣

引子:母版页之方便之处相信做过web开发的都不用说太多,可以重复利用资源,维护方便,开发起来你只需关注当前页变动的东西,固定不变的全部放到母版页,可以理解为前人栽树后人乘凉,省时,省力,省心.下面围绕2点简单说下.一.node.js开发,基于ejs引擎的母版页二.前提环境 ,如何使用及示例介绍就像上面的这个图,如果你的业务说覆盖的页面只有中间是变化的,那么其他部分完全可以放到母版页中呈现.node.js 下的web应用开发有2种模板引擎 ejs 和 jade ,当然你可能直接用jquery 的前端模板后端ajax请求数据等等....(也算一种吧)ejs 下如何使用母版页?ejs的母版页功能支持

node.js 实现一个简单的登录拦截器

拦截器在web开发中随处可见,比如站点的管理后台,不说所有人都能进入,所以就需要做一个拦截器并友好的跳转到提示页.下面我们简单实现一种,判断用户是否登录成功,登录不成功的用户自动重定向到登录页面.首先我们实现一个过滤器exports.checkAuth=function(req,res,next){ vartoken=req.signedCookies.token; if(token&&req.session.user&&req.session.user.token===token) next(); elseif(token){ //ifinvalidtoken

node.js post json格式数据到服务器的几种方法

json格式被越来越多的开发者说青睐,我们常常在接口定义时使用这种格式参数进行数据交换.今天主要给大家从繁到简的几个node.js下使用的提交 json个数参数的方式方法.下面示例中出现的参数都做了处理,拷贝代码后需要更改这些参数同时自己写一个接收json格式的api,请求成功后再返回json格式(一) node.js 原生自带http模块,可以解决基于http协议下的请求及回发,执行效率高,但是好多东西需要开发人员自己动手来实现,看下面代码varhttp=require('http'); var body = {   "data":{    "

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

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

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

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

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 () {    

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')

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

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

回到顶部