Node.js学习技术栈

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

  • HomePage

实时应用web框架meteor

  • HomePage
  • Meteor-DDP翻译
  • Meteor 非官方中文文档(不包含API部分)
  • 基于meteor开发的开源项目列表

基于Express的实时MVC框架Sails

  • HomePage

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

  • HomePage
  • Async中文详解

eventproxy

  • HomePage

Q Promise 异步模式

  • HomePage
  • 在Node.js 中用 Q 实现Promise – Callbacks之外的另一种选择

co

  • HomePage
  • 深入理解 Yield
  • co wiki

异步解决方案示例

Redis 内存键值数据库

  • node_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系列文章


Node.js学习技术栈_第1张图片

从零开始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.

    gojs.net/latest/index.h

    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实现文件上传npmjs.com/package/busbo

    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。你有很多机会去涉猎各种外部库,应用,但初学宝贵的兴趣和新鲜头脑应该留给核心。


    你可能感兴趣的:(NodeJS)