关于使用 Connect-Busboy 实现文件上传 优化说明

这篇博文完全上关于上一篇的优化 先看上一篇 node.js 在 Express4.0 框架使用 Connect-Busboy 实现文件上传 因为从上次博客改用 connect-busboy 来上传文件后,发现了明显的一个bug bug 说明 文件显示上传 100% ,然后预览的时候,偶尔会发现图片只能显示一部分 这种情况在 png 格式 图片尤其严重 昨天重新 review 代码,发现一个bug ,当然和 connect-busboy 一点关系都没有,而是涉及到流的处理过程. 这里把上一篇 blog 里贴出的上传代码在放上来分析一下 function upload(req, res

node.js 版本控制 nvm 和 n 使用 及 nvm 重启终端失效的解决方法

今天的话题包括2个部分 node.js 下使用 nvm 或者 n 来进行版本控制 nvm 安装node.js 版本后,重启终端 node , npm 环境变量失效 第一部分 用什么来管理 node.js 版本 首先应该欢呼庆祝一下 node.js 终于发布了有历史意义的正式版 1.0 ,虽然我们看到的是V4.0,其实他就是node.js 真正意义的 1.0, io.js 不负众望,完成了它的使命. 回头看这几年node.js 以及 io.js 的发展速度,各种版本的迭代发布,我们很有必要用一个 node.js 的版本管理工具来控制当前系统的 node.js 版本. 为什么

node.js 下定制你的 config 配置文件

在任何一个项目中都缺少不了配置文件 具有下面的特点: 数据量不大,信息需要长期保存,容易维护 当然你也可以在数据库中建一张表,去存放这些信息,一点错都没有,但是,是不是有点牛刀杀鸡的感觉 今天和大家分享的是配置文件的定制,根据你的运行环境不同动态配置一张灵活的 config 配置文件. 之前的一篇博文 根据 ENV 环境变量不同加载不同的配置文件 这一篇可以说是上一篇的子章节,上一篇说的太笼统, 这一次针对一个点,然后铺开说一个功能 我的博客全部用绝对路径 为什么? 因为总有些人直接过来 copy 我的文章,然后不加出处,不署名,这是别人辛辛苦苦的劳动果实,作为一个I

node.js 利用 sitemap 为你的站点生成站点地图

node.js 下利用 sitemap 生成站点地图. 大致的工作就是,我们生成一份提供给搜索引擎的 Sitemap 之前你获取在网络上找过各种在线生成 sitemap 工具或者服务,使用起来却都不尽人意.有的收费,有的最大抓取2层url ,还有的最大链接数限制在500个. 所以今天和大家分享的是如何用 node.js 来为站点生成 sitemap 什么是sitemap 借用百科的一段话 Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页。最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的

node.js 在 Express4.0 框架使用 Connect-Busboy 实现文件上传

node.js下四种post提交数据的方式 今天说分享的是其中一种,就是上传文件. Express 4.0 以后,将功能原子化,高内聚,低耦合,独立出了很多中间件 今天主要分享文件上传 对于connect-multiparty ,他是专门处理此类post数据相关的依赖包,也是博客之前使用的方式 github 官方地址: https://github.com/andrewrk/connect-multiparty 安装 npm install connect-multiparty 使用 var multipart = require('connect-multiparty')

node.js 下 forever 利用别名启动 node 服务

出自:node.js 下 forever 利用别名启动 node 服务这一篇博文又和大家分享 forever 这个开源包.今天说到的 forever 别名启动node.js 服务,和上一篇博文密切相关,涉及到 linux下创建硬链接 软链接的问题 ,还没有看的现在就去看看,不收费的,随便看!我们平时如何用 forever 来启动 node 服务:foreverstartapp.js利用 linux 软链接 (别名) forever 如何启动 node 服务:foreverstartapp_link上面的 app_link 就是 app.js 文件在 linux 系统下的一个软链接然并卵,这

node.js 下使用 redis 作为缓存介质

之前有一篇介绍node.js 下,轻量级缓存应用模块 node-cache点击访问.今天介绍使用 redis 作为缓存介质.首先,我们需要一个 node.js 下可以访问 redis 的中间件,就是 node_redisgithub地址:https://github.com/NodeRedis/node_redis安装:npminstall--saveredis然后我们封装一个缓存类:varredis=require('redis'); varconfig=require('../config'); ///////////////////////////////

node.js 下 cluster 模块充分利用cpu资源实现群集功能

为什么会出现cluster ?大概在 node.js V0.8 之前的版本,node.js 本身不提供多核多进程处理的解决方案,当然你可以使用第三方的开源包来实现.直到V0.8之后的版本,node.js 内置了 cluster 功能,node.js 终于可以不依赖第三方cluster包来利用服务器多核,多线程资源.node.js 内置模块 cluster 的出现,帮助我们轻松利用多核,多进程开发的难度及负载均衡群集.cluster 是如何工作的 ?工作进程是通过使用 child_process.fork 方法派送的,他们可以通过IPC (进程间通讯实现父进程和子进程相互传递句柄及通讯)看下面的

commander.js node.js下又一个命令交互开源包

上周分享了一篇关于node.js 下命令行框架 yargs 如何实现与程序交互今天又一款强大的命令行框架开源包 commander.jsnode.js 下的commander是从Ruby下同名项目移植过来的.下面我们来简单了解下.github项目地址:https://github.com/tj/commander.js npm 地址:https://www.npmjs.com/package/commander 使用:npminstall--savecommandervarcommander=require('commander'); //定义参数 commander.    

node.js 命令行框架 yargs 和你的程序实现交互

如何让你的node.js 应用程序像shell 脚本一样和你交互?于是就有了今天这一片博文 关于yargs 使用分享.大概有一种情况你需要让你的程序接收一个参数,通过这个参数我们做一系列的定制化功能.常见的做法是 把一些不同环境不同配置的变量写到 config 配置文件中.当你的环境变化的时候,你手动去修改你的config 中的变量来达到不同环境显示定制化的东西.更具象的一个例子:config文件中有一个配置项 langue当你发布国内站点的时候,你需要配置成 langue="zh-cn"当你发布国外站点的时候,你需要配置成 langue="en"现在,

node.js 使用 mssql 开源库操作 sqlServer 数据库

node.js 连接 ms SqlServer ,你没有看错,就是这样.我们抛开一切操作系统的歧视, 当你需要用到的数据源存储在 SqlServer 中,那么就会遇到我们今天要说的情况.一. mssql 下载安装github地址:https://github.com/patriksimek/node-mssql mssql 默认使用Tedious驱动.Tediousby Mike D Pilsbury (pure javascript - windows/osx/linux) 默认支持(windows/osx/linux 等系统)所以你在mac 下用node.js 连接 sqlserver 是

PostgreSQL 使用 node-postgres 在 node.js 中的应用

之前有一篇介绍PostgreSQL在MAC环境下的初体验 ,今天要和大家分享的是 node.js 应用 + PostgreSQL 做数据存储的demo.node.js 环境使用 PostgreSQL 需要下载编译node-postgresgithub地址:https://github.com/brianc/node-postgres 使用:zhangzhi@moke:npminstall--savepgREADME.md 关于如何使用的api 也比较简单:varpg=require('pg'); varconString="postgres://username:pa

when 让你跳出异步回调噩梦 node.js下promise/A规范的使用

其实关于promise 的博客,前端时间专门写了一篇关于 promise 规范的文章,promise规范 让 javascript 中的异步调用更加人性化.简单回忆下:promise/A规范定义的“Deferred/Promise”模型其实是实现了“发布/订阅”模型.通过Deferred对象发布事件,包括下面2种事件完成 --> resolve事件,失败 --> reject事件,通过Promise对象进行对应完成或失败的订阅类似于任务状态转变时事件被触发.将会对应的执行事件绑定函数.每个Promise任务都有三种状态:默认(pending)、完成(fulfilled)、失败(re

避免uncaughtException错误引起node.js进程崩溃

uncaughtException 未捕获的异常, 当node.js 遇到这个错误,整个进程直接崩溃.或许这俩个人上辈子一定是一对冤家.或许这俩个人经历了前世500次的回眸才换来了今生的相遇,只可惜在错误的时间,错误的地点,做了错误的事!什么是uncaughtExceptionuncaughtException 是一种未捕获的异常,它是node.js 进程上的一个事件,直接挂在 process 上.什么时候会遇到uncaughtException1.当你的程序出错了2.这个错误还没有被 try ... catch 住以上2个条件同时发生时, 说明当前的一个异常会一直冒泡到事件循环为止.然后打印

forever node.js web应用中不可或缺的伟大模块

javascript 一统江湖的势头越来越猛,越来越重的前端,不得不实施前后端分离,angular.js 成功把前端javascript抽象成了一个复杂的MVC框架,注意,它是一个框架,可不是普普通通的插件,或者工具包.另一位兄弟则是跳出浏览器宿主的限制,活跃在了服务器端,大名鼎鼎的 node.js还有一位齐头并进的好哥们 mongodb ,它不仅让你使用熟悉的javascript范围数据库,而且还自己实现了javascript引擎.可能创建 javascript 语言的大牛,看到今天js的发展事态,想必脊梁骨也是阵阵发凉.我们好像扯远了,开题先痛痛快快意淫一把怎能善罢甘休,O(∩_∩)O~由

node.js 和 nginx 配合实现 gzip 压缩,让网站浏览更顺畅

node.js 开发的站点,如果你也是用了nginx实现反向代理.那么在服务端可以轻松实现 gzip 压缩,让站点浏览更顺畅.前提条件: node.js + nginx 反向代理node.js 需要做的工作:express 4.0以下版本:app.use(express.compress());//主要是这句 app.use(express.json()); app.use(express.urlencoded()); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookie

node.js 调用 wechat 开发微信公众号自定义接口及中间件简介

上一次给公众号做自定义接口已经是很久以前的事了.....以至于今天发现那个公众号的接口已经不能服务了.访问公众号直接给出提示"该公众号暂时无法提供服务,请稍后再试"我想难道是年久失修? 也不应该啊,这么牛x的公司绝对不会修改api,或者是更新api不兼容之类的.....看来问题还是出在我这边.我甚至忘记了公众号登录密码.进去后复制接口链接地址到浏览器地址栏,发现是可以访问的,那么问题出在哪里?难道腾讯知道我好久没有维护此号了.所以暂时不提供服务了,想想以前网易邮箱经常被冻结,我竟然真的以为是这样的了.所以:我尝试前后到编辑模式,然后再切换回来,依然不提供服务...我试图改了

node.js 下使用 util.inherits 来实现继承

上一篇博客说到了node.js继承events类实现事件发射和事件绑定函数,其中我们实现了一个公用基类 _base ,然后在模型中差异化的定义了各种业务需要的模型并继承 _base 公共基类.但是其中的继承是一笔带过,今天详细的说下node.js中继承.varevents=require('events'); varutil=require('util'); function_base(){ this.emitter=newevents.EventEmitter(this); }; util.inherits(_base,events.EventEmitte

node.js express 路由小功能 - 图片防盗链

小功能: node.js web服务器的图片防盗链原理:http 请求包括 (请求头 header + 请求体 body )请求头里面有一个属性:referer 此属性可以标识你所请求的资源来自哪里.简单讲就是,我是网站 A ,当我去请求任何网络资源的时候, referer 属性都会标识我是 A ( header.referer=A )因为我被标识了A ,如果我去B网站上获取资源 (视频,图片,文档.....)时,B 网站就可以检查一下请求头里的 referer 属性. 如果不是来自本身( B 网站 ) 那么就可以拒绝返回,或者返回替换后的资源 (比如一张警告提示图片....)实现: //图片

node.js 调试工具 node-inspector 简要说明

我们在接触客户端javascript的时候,调试利器就是firebug ,也是当年为何喜欢用上firefox 浏览器的主要动力,当然,后来 chrome 插件里也出现了firebug的身影.....但是服务器端开发语言node.js 一直以来调试不是特别方便,可能是之前被 virtual studio惯坏了,这种用 console.log() 去打印变量甚至回调数据实在是太蹩脚.当然,有一款很强大的IDE ,webstrom对node.js提供了最全面的支持,也可以轻松配置来实现调试,下回有必要和大家分享一次.今天要分享的是关于node-inspector 下调试node.js程序.第一步:n

node.js 一个路由2次 request

node.js 和其他服务器端编程语言有很大区别,语言上的特性优点已经在前面分享过,这里就不说了.与其他语言相比,还有一个区别,node.js 自身实现了一个服务器,而其他服务器端语言大部分要依赖Apach ,nginx ,IIS 等.node.js 可以用几句代码轻松实现:varhttp=require('http'); var webServer = function (req, res){  res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});  res.write('<html>&l

那些曾经被我们误解的异步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

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 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 验证 Oauth1.0 接口

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

[转] Node.js一分为二:开源项目真需要“大管家”吗?

猎云网12月15日报道 (编译:西洲豹)Node.js作为服务器编程语言的后起之秀,常用来构建和运行Web应用,近日却爆出其社区出现分裂。由于对官方运营商Joyent公司在Node.js管理上的长期不满,多位核心开发者另立门户,创建了分支Io.js。从GitHub得知,Io.js的第一个版本(1.0.0 alpha1版)将于2015年1月13日发布。Node.js开源社区组织者Mikeal Rogers也是“另立门户”中的一员,他说:“我们不想被另外一家公司任命的管理人员牵着鼻子走,而是想让Node.js的贡献者拥有更多的控制权,并寻求更多的共识。”Io.js与Node.js的分离,再一次凸显

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

node.js使用leveldb

上一篇简单说到leveldb数据库,此开源项目目前是支持处理十亿级别规模Key-Value型数据持久性存储的C++ 程序库。那么问题来了,node.js环境下如何使用leveldb数据库呢?node.js下需要第三方npm包 levelup 和 leveldown 来支持.安装依赖环境:npminstalllevelupleveldown提醒:levelup 版本最好用0.10.0或者更低版本,最新版本和leveldown编译时出问题.npm 安装指定版本依赖包npminstalllevelup@0.10.0或者你也可以这样npminstalllevel使用起来也非常简单.varlevelup

回到顶部