1.Node.js学习技术栈
nodejs是比较简单的,只有你有前端js基础,那就按照我的办法来吧!一周足矣
推荐技术栈
- express 4.x (express最新版本,初学者先别去碰koa)
- mongoose(mongodb)
- bluebird(Promise/A+实现)
- jade(视图层模板)
- mocha(测试)
- node-inspector(调试)
https://github.com/i5ting/express-starter
了解http协议,尤其是表单和ajax传值,在req里如何接收
- 绝对地址和相对地址
- querystring
- url 和 uri
- http status code
- http verbs
- req取参数的3种方法
- 3种不同类型的post
- 命令行玩法
- supertest用法
- what is rest?
http://i5ting.github.io/node-http/
了解db相关操作,先以mongoose为主
- crud(增删改查)
- 了解分页
- 了解关系(1对1,1对多)在mongoose里如何实现
- 了解statics方法和methods的区别
- 了解pre和post的差别
- 了解mongoose的插件机制
- 了解mvc里m的作用,以及什么样的代码该放到模型里
- 了解索引优化
- 了解mongodb的部署
了解Promise/A+规范,合理规避回调陷阱
- 了解的node的异步
- 了解异步的恶心
- 了解异步基本场景,比如waterfall这样的路程使用async如何处理
- 了解q和bluebird用法(如果有angularjs经验,推荐q,其他只推荐bluebird)
- 了解bluebird的promisifyAll用法
- 了解如何重构流程,以及代码的可读性
使用tdd/bdd测试,最小化问题
测试的好处,这里就不说了,但是有一点是要说的,node的调试比较难,往往不如写测试来的快,推荐学习一下
- 理解最小问题思想,培养程序员该有的强大的内心
- mocha的基本用法
- 理解assert/should/expect等断言的用法
- 理解测试生命周期
- 理解done回调
- 理解如何模拟数据
- 理解http下的supertest测试
- 理解测试覆盖率
- 理解基于gulp自动化测试方法
如果有兴趣,可以去了解更多bdd/tdd内容,甚至是cucumber.js
你无论如何都要会的:调试
调试有3种方法
- node debug(太挫了,如果不是c,了解adb之类的人不推荐用)
- node-inspector(推荐4※)
- tdd/bdd(推荐5※)
2.Node.js中文资料导航
Node.js
- HomePage
- Infoq深入浅出Node.js系列(进阶必读)
- Io.js中文文档
- Node.js中文文档
- Node入门
- 被误解的 Node.js
- Node.js C++ addon编写实战系列
- 热门node.js模块排行榜,方便找出你想要的模块
- nodejs多线程,真正的非阻塞
- 浅析nodejs的buffer类
- 利用libuv编写异步多线程的addon实例
- Node.js中exports与module.exports的区别
- Node.js http 管道拒绝服务漏洞
- Node.js高级编程
- Node.js代码风格指南
- 七天学会NodeJS
- 前端快速掌握 nodejs+mongodb+express+jade
业界新闻
- NodeJS无所不能:细数10个令人惊讶的NodeJS开源项目
- 看eBay如何评价他们的Node.js首次尝鲜
- 程序员如何说服老板采用Node.js?
- 百万级并发 Node.js也能行
- 高性能Node.js:来自LinkedIn Mobile的10条优化建议
- Kraken:改变PayPal开发文化的Node.js框架
- Groupon抛弃Rails,转向Node.js
- PayPal为什么从Java迁移到Node.js,性能提高一倍,文件代码减少44%
经验分享
- SDCC讲师专访:淘宝朴灵谈Node.js
- Node.js的核心与红利
- QCon北京2013 Node.js专题出品人朴灵专访
- 一个周末掌握IT前沿技术之node.js篇
- 用node+express搭建多人博客教程系列
- Node.js静态文件服务器实战
- 人人和微博登录模块的实现
- 《京JS》会议 & V8上的JS优化
- 沪 JS 国内讲师的 PPT 收集
- 给Node.js新手的7条小建议
模块导航
web服务器框架
最流行的web框架Express
- HomePage
- 加装涡轮,提速expressjs
- 给 connect 的 static 模块加上url路径前缀
- 研究nodeclub 登陆验证逻辑的一些心得
- Express.js 中文入门指引手册
- Connect架构初探 for 新手
- 使用 Express + Socket.IO 搭建多人聊天室
国人开源web框架rrestjs
实时应用web框架meteor
- HomePage
- Meteor-DDP翻译
- Meteor 非官方中文文档(不包含API部分)
- 基于meteor开发的开源项目列表
基于Express的实时MVC框架Sails
Koa,下一代 Node.js web 框架
- HomePage
- koa-guide
- koa-middlewares koa常用中间件集合
Mysql 老牌关系型数据库
- HomePage
- mysql处理BIGINT里面的一个坑
- 使用node-mysql中的连接池
- mysql自动断开解决办法
Mongodb
- node-mongodb-native
- mongoose
- 如何使用mongoose对一个100万+的mongodb的表进行遍历操作
- [技术讨论]mongodb驱动的正确使用方法
异步流程处理
async
eventproxy
Q Promise 异步模式
- HomePage
- 在Node.js 中用 Q 实现Promise – Callbacks之外的另一种选择
co
- HomePage
- 深入理解 Yield
- co wiki
异步解决方案示例
Redis 内存键值数据库
Pomelo 网易出品的网页游戏框架
- pomelo
- Infoq深入浅出node.js游戏服务器开发
- 官网wiki
- 响应非常迅速的官方论坛
字符格式
- 開源的簡繁轉換庫OpenCC支持Node.js了
- iconv-lite扩展:增加big5/shift-jis支持
网页模板引擎
- WEB模板jade、ejs、handlebars 万行代码解释效率比较,jade完败
- Javascript模板引擎性能对比及几点优化
- 让 ejs 更加快 | Let ejs faster with options._with = false
- EJS快速入门教程
图片处理
- Nodejs跨平台轻量级图片编解码库【增加Jpeg质量调整】
- node-ccap模块生成captcha验证码
- 使用nodejs将html5 canvas base64编码图片保存为文件
- web-camera,node + phantomjs 网页截图
运维
- Node.js 异步异常的处理与domain模块解析
- 关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)
- forever 替代工具 pm2 的介绍
- upstart封装mongodb应用为系统服务
- 告别node-forever,拥抱PM2
- 阿里云主机Nginx下配置NodeJS、Express和Forever
性能测试
- 阿里出品的node.js调研与服务性能测试
- 多核单服务器各种配置和业务压力下的node.js性能测试
- 巅峰对决:node.js和php性能测试
- 性能测评:Node.JS比Java EE快20%
活跃开发者(排名不分先后)
- 朴灵
- dead_horse/死马
- snoopyxdy
- Python发烧友
- 老雷
- shiedman
- jiyinyiyong
开源案例 收集Cnode的开源项目
社交类
- Cnodejs 最活跃的Node.js社区
- 晓知 个人博客
- 使用Nodejs编写多人订餐系统
- NodeJS写的WebQQ
- Yblog 博客程序
- noderce博客程序
工具类
- cnpmjs.org 企业级 npm 解决方案
- wechat微信中间件
- 深度遍历目录/列出目录下所有文件
- lincell发布0.1.1版本,一行命令创建IDE
- HTML标签XSS过滤模块
- 基于Node.js的中文分词模块
- 纯真IP库lib-qqwry
- 豆瓣SDK
- 数字与字符串转换模块baseN,支持2~62间任意进制转换
商业应用
- 淘宝数据魔方
- 淘宝指数
- 淘宝时光机
- 点点网
- 花瓣网
- 雪球网
- 小米手机抢购
- 网易pomelo消息推送系统
- PayPal
- Groupon
- 百度推送平台
- 新浪微博DB proxy
- 腾讯朋友网推送
node.js中文书
了不起的Node.js
九浅一深Node.js pu大作品
node.js入门经典
node.js开发指南
3.从零开始nodejs系列文章
从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低。非常适合小型网站,个性化网站,我们自己的Geek网站!!
Nodejs学习路线图 [视频购买] [试看]
从零开始 – 入门篇
准备Nodejs开发环境Ubuntu
Node.js开发框架Express4.x
Nodejs开发框架Express3.0开发手记–从零开始
Mongoose使用案例–让JSON数据直接入库MongoDB
Nodejs对MongoDB模糊查询
用Nodejs连接MySQL
Nodejs配合bootstrap-select下拉列表
nodejs分页设计配合bootstrap-paginator
nodejs豆瓣爬虫
玩转Nodejs日志管理log4js
Nginx反向代理Nodejs – log4js日志IP显示错误
upstart封装nodejs应用为系统服务
成为高手 – 进阶篇
Nodejs基础中间件Connect
grunt让Nodejs规范起来
bower解决js的依赖管理
Yeoman自动构建js项目
快速创建基于npm的nodejs库
CNPM搭建私有的NPM服务
NPM下载出错 No compatible version found
Nodejs实现websocket的4种方式
Socket.io在线聊天室
websocket服务器监控
Nginx反向代理Websocket
restify构建REST服务
jasmine行为驱动,测试先行
Karma和Jasmine自动化单元测试
Nodejs服务器管理模块forever
Express结合Passport实现登陆认证
Passport现实社交网络OAuth登陆
Nodejs发邮件组件Nodemailer
快速排序的Nodejs实现
桶排序的Nodejs实现
追根溯源 – 内核篇
解读Nodejs多核处理模块cluster
Nodejs创建HTTPS服务器
Nodejs异步异常处理domain
Nodejs加密算法库Crypto
Node.js缓冲模块Buffer
Node.js进程通信模块child_process
跨界应用 – 创造篇
Nodejs与R跨平台通信
tty.js打通浏览器与Linux的通道
用Highcharts轻松构建交互性图表
利剑在手 – 工具篇
RequireJS异步模块加载
Nodejs临时文件回收器reap
Nodejs异步流程控制Async
Async多任务时间管理
让Nodejs来管理定时任务later
wind.js助力异步编程
UnderscoreJS精巧而强大工具包
Commander写自己的Nodejs命令
Stylus让CSS也能编程
Browserify 跑在浏览器上的Node程序
Retry优雅的失败重试策略
用UglifyJS2合并压缩混淆JS代码
Marked高效的Markdown解析器
Web技术 – 应用篇
Hexo在github上构建免费的Web应用
Jekyll在github上构建免费的Web应用
用WebStorm编辑Markdown
30秒制作幻灯片 Cleaver
图片延迟加载库Layzr
如何系统学习Node.js
1.《nodejs入门》,才38页,很好,书中项目做一下,学会基础
2.《nodejs开发指南》。180多页,很好,书中项目做一下,知道基础,及基本的配合express,jquery,bootstrap,数据库MongoDB
另附一些node实现书中例子的一些变化使用Express3.0实现
3.开始看express创建初始项目的源代码对比2中的书,发现express更新后新的特性:Migrating from 3.x to 4.x · strongloop/express Wiki · GitHub
看express官网api
英文:Express 4.x - API Reference
中文:Express - api参考
4.之后发现,一个系列课程,从零开始nodejs系列文章:从零开始nodejs系列文章
其中 文章: Node.js开发框架Express4.x:Node.js开发框架Express4.x ,详细介绍了express4项目的基本内容,很好
文章:用Nodejs连接MySQL:用Nodejs连接MySQL,介绍mysql与node基本,及数据库连接池,宕机,连接超时等node问题解决办法,node-mysql官网也有相应英文解决办法
5.node+json:node.js里面怎么创建和解析JSON格式的文件?
更全的是这一个How to parse JSON using Node.js? 但要注意如果require json,只加载一次,更新之后,再使用,可能还是老版本
json不好查看的问题:读写 JSON 文件 · Issue #73 · zhanhongtao/blog · GitHub
6.node邮件验证:Nodejs发邮件组件Nodemailer
选择适合的Node.js授权认证策略
7.很全的node module Modules · joyent/node Wiki · GitHub
8.文件操作,要么官方文档:File System Node.js v0.12.2 Manual & Documentation,
或者node基础-文件系统node.js 文件操作,有一个要注意的是 存储文件时,比如writefile写路径 要使用path.join(__dirname, “相对于当前文件路径”); 如path.join(__dirname, "../upload/recordList/" + generateID("record") + ".json");,后端要采用这种dirname的形式,前端可以直接写相对于当前文件路径的形式
node+express
1.整体介绍框架 Express框架 -- JavaScript 标准参考教程(alpha)
2.express取值: 使用 NodeJS + Express 從 GET/POST Request 取值
3.session+cookie: node.js web开发:EXPRESS 4.x 以上使用session和cookie 的记录
express 框架之session
express-session官网 npmjs.com 的页面
Node.js Express 从入门到菜鸟(二)——Cookie+Session+三层搭建
express 4.2.0 使用session和cookies
在Express 使用session 做登录控制
去掉flash之后,可以只用session,在每次post一开始 置req.session.error为null,之后,验证过程中,检查错误再设置req.session.error,然后根据结果redirect之后,检测是否error为null,来决定是否展示
node session保存的只是中间键值对,不管赋予res.locals.user等,都不是对象,需要在中间件中重新生成对象,才能调用方法,当然如果只是使用属性值,则不需要
4.express基本的中间件官方网站: senchalabs/connect · GitHub
node+mysql
1.node所用的mysql官网:felixge/node-mysql · GitHub
2.Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql)
3.用Nodejs连接MySQL
4.三种常用数据库(Oracle、MySQL、SQLServer)的分页之MySQL分页
5.sq语句注意顺序,order by group by limit..一般放在where后面
express+ejs
1.EJS学习总结 - 双月通天的个人空间
2.EJS 模板快速入门
3.nodejs express template (模版)的使用 (ejs + express)_node.js 笔记
4.ejs我的总结:
ejs 写法:
普通传入并使用变量:<%= title %>
普通for执行js代码(for中间的代码一定可以执行到):
<% for(var i=0; i
<%= headerNavbar[i].name %>
<% } %>
特殊if语句的js代码(if中间的额代码不一定可以执行到):
<% if(active=='index'){%>
class="active"
<% }%>>
jquery
1.jQuery 教程
2.jQuery工具方法 -- JavaScript 标准参考教程(alpha)
3.在线文档-jquery
4.jQuery设计思想!!
jquery ui
1.jQuery UI
2.中文API:http://www.css88.com/jquery-ui-api/
3.jQuery UI 实例
4.jqueryrain神站:tabs:80+ Best jQuery Tabs with Examples
js tree 库:15+ jQuery Treeview Plugin & jQuery Tree with Example
jsTree
Bootstrap:
1.基本CSS样式 · Bootstrap v2
2.全局 CSS 样式 · Bootstrap 中文文档 v3
3.bootstrap row等偏移-20px
4.补充:学会Twitter Bootstrap不再难 :从2.x升级到3.0版本
html5
1.drag:库:interact.js - JavaScript drag and drop, resizing and gestures with inertia and snappingDragdealer.js 教程:HTML 5 拖放HTML5 drag & drop 拖拽与拖放简介 « 张鑫旭
git:
1.Git:代码冲突常见解决方法
2.使用WebStorm和Git开发Node.js应用
3.git生成ssh key及本地解决多个ssh key的问题 写的非常清楚
4.Generating SSH keys
js:
1.对象本身方法,可以用于对这类对象的工具类方法,当作对象manager方法
对象原型中方法,用于每个不同对象实例的方法
2.Javascript异步编程的4种方法 callback尽量写成return callback()
3.JS对象类型的确定
4.js取属性,一般用object.pro ,如果需要动态确定属性,可以使用 object['dynamic'+pro],动态取属性,包括session,虽然为键值对,但这样也可以
json:
1.jquery操作:jQuery中读取json文件
后端更新前端:
1.怎么使用 JavaScript 将网站后台的数据变化实时更新到前端? - 前端开发
2.Socket.io在线聊天室
3.迈出nodejs的第二步,用nodejs+socket.io搭建一个websocket聊天室
4.使用Node.js实现数据推送
5.Automattic/socket.io · GitHub
6.Nodejs实现websocket的4种方式
RESTFul:
1.Pixelhandler's Blog
2.理解RESTful架构
杂:
1. passportJS配置用户验证:PassportJS 配置失败:req.user 未定义
Passport | Configure
2.回调函数:回调函数,就是放在另外一个函数(如 parent)的参数列表中,作为参数传递给这个 parent,然后在 parent 函数体的某个位置执行。理解javascript中的回调函数(callback)_javascript技巧
3.不再用的req.flsah():express 版本更新后遇到的问题 flash()
4.app.locals和res.locals 图灵社区 : 阅读 : express配置项more
5.Crypto加密解密:Node.js加密算法库Crypto
6.在 CSS 中如何使用百分比设置页面 Div 高度? - 前端开发
7.HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解(转载)
8.文件上传的渐进式增强
拖动上传 js库:Dropzone.js
9.js diagram 需求图:JointJS - the HTML 5 JavaScript diagramming library.
http://gojs.net/latest/index.html
10js 网页分析:Google Analytics Official Website
11.js network网状图 ,时间线,2d,3d 库:vis.js - A dynamic, browser based visualization library.
12.js fileManager:10 jQuery Based File Manager Plugins
在线富文本编辑器:RESPONSIVE filemanager 9.9.2(php tinyMCE)
推荐:Redactor Plugins轻量且美观
13.小型:file explore:Kloudless/file-explorer · GitHub:可以实现从多处上传,选择文件
Cute File Browser with jQuery and PHP 美观轻量但是需要jquery ajax php
14. js tree 库:15+ jQuery Treeview Plugin & jQuery Tree with Example
jsTree
15.messageBox 通知框 js库:Bootbox.js—alert, confirm and flexible modal dialogs for the Bootstrap framework
16.【css】清除浮动(clearfix 和 clear)的用法
六种实现元素水平居中
17.button css库:Buttons - 一个高度可定制的按钮(button) CSS 样式库。
18.Html 解决长串英文字母显示不能自动换行
19.非input元素使用focus等方法:让元素获得焦点
20.text file等在表单中同时上传时,记得表单设enctype="multipart/form-data",否则可能拿不到数据,还有一个,ajax传输data,记得设置data-type为json,尤其jstree使用ajax传输节点
21.多文件,多图片上传预览,进度等,可以用webuploader,busboy等
22.busboy nodejs+busboy实现文件上传https://www.npmjs.com/package/busboy
23.前端字体:字体选择_有字库
24.$('#btn').on('click',function(e){ e.preventDefaults(); or return false; })均能在表单提交之前阻止提交
24.404 not found 网页设计真没见识过,原来404错误页面可以这样设计
25.阅读以 JavaScript 编写的本地文件FileReader - Web API 接口 读写客户端本地文件
26.chrome下 页面退出时发送ajax写法:
$(window).on('beforeunload', function ()
{
//this will work only for Chrome
$.ajax({
type:'GET',
url:'/ajaxRequest/myClassesOfteacherclose',
async:false
});
});
27.前端中下面两个的$('a').text()是不一样的,会计算空格
性能优化:
1.!!!毫秒必争,前端网页性能最佳实践
2.HTML 5 应用程序缓存
3.Lazy Load Plugin for jQuery
你应该去学习node的核心,也就是node本身,而不是纠结于大量彼此没有紧密联系的工具和库。即使你想,你也不可能有时间去熟悉这些工具和库。即时你有时间也没有多大意义,因为他们不能帮助你加深对node本身的理解,你不天天用就很快会忘记。它们之间彼此的割裂和你要的“系统”学习并不一致。我建议你从简单但核心的东西开始,我自己的经验,如果你理解了核心,尤其是核心的概念(未必是语法和实现),理解整个生态系统的其他工具,库,应用就很成竹在胸了。
起步:熟悉REPL
REPL Node.js
如果你没有Javascript基础,应该在这个时候用好REPL熟悉语法
常用调用
Global Objects
util
核心概念
Timers
Buffer
Events
Stream
Modules
Errors
在此基础上再去练习
File System
HTTP
express,mocha,npm是node生态系统里的工具和应用,nodejs的实现才是你要学的nodejs本身,如果你一头扎进无边无际的工具和应用,几年以后你都可能并不知道什么是nodejs。你有很多机会去涉猎各种外部库,应用,但初学宝贵的兴趣和新鲜头脑应该留给核心。