Node.js最新Web技术栈(2016年4月)
上一次的发布的是精华 Node.js最新Web技术栈(2015年5月),感谢大家喜爱,值此koa2.0发布后,决定再次升级技术栈
Node.js是比较简单的,只有你有前端js基础,那就按照我的办法来吧!一周足矣,虽然这版上了es语法,但依然是可以简单写,也可以难写,参见《全栈工程师之路-Node.js》,里面讲了Node.js和全栈相关的思考,整体对未来Node.js比较看好
核心变更:es语法支持
- 使用Node.js 4.x或5.x里的es6特性,如果想玩更高级的,可以使用babel编译支持es7特性
- 合理使用standard 代码风格约定
- es6语法,写的一般,比较啰嗦,凑合看吧 http://es6.ruanyifeng.com/
- 需要大家重视OO(面向对象)写法的学习和使用,这是es的另一个好处,推荐蔡伟小兄弟的《JavaScript Patterns》 examples in ECMAScript6
相比es语法,其实我本人更喜欢typescript的,不过写Node.js还是推荐跟Node SDK玩才是。
推荐技术栈
- koa 1.0 && 2.0 (koa2.0刚发布不久,喜欢折腾的可以考虑)
- mongoose(mongodb)
- bluebird(Promise/A+实现)
- jade(视图层模板)
- ava(测试)
- vscode(调试)
推荐生成器(稍后会把ava和bluebird加上)
https://github.com/17koa/koa-generator
了解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为主
这部分基本无调整,只是注意es写法就好了
- crud(增删改查)
- 了解分页
- 了解关系(1对1,1对多)在mongoose里如何实现
- 了解statics方法和methods的区别
- 了解pre和post的差别
- 了解mongoose的插件机制
- 了解mvc里m的作用,以及什么样的代码该放到模型里
- 了解索引优化
- 了解mongodb的部署
了解Generator、Async和Promise/A+规范,合理规避回调陷阱
这次的变更主要是es6支持的generator和es7支持的async
根据Koa 2.x的3种中间件看,现在支持是promise第一,其次是co包装的generator,最后是async函数。等async支持了以后,就是await + Promise的天下
- 了解的node的异步、generator和async
- 了解异步的恶心
- 了解异步基本场景,比如waterfall这样的路程使用async如何处理
- 了解q和bluebird用法(如果有angularjs经验,推荐q,其他只推荐bluebird)
- 了解bluebird的promisifyAll用法
- 了解如何重构流程,以及代码的可读性
使用tdd/bdd测试,最小化问题
这次的变更主要是下一代技术栈以es开发为主,这样的话,测试用mocha,tap、tape等就没有ava帅了
推荐ava替代mocha,其他基本都一样
- Minimal and fast
- Simple test syntax
- Runs tests concurrently
- Enforces writing atomic tests
- No implicit globals
- Isolated environment for each test file
- Write your tests in ES2015
- Promise support
- Generator function support
- Async function support
- Observable support
- Enhanced assertion messages
- Optional TAP output
- Clean stack traces
测试的好处,这里就不说了,但是有一点是要说的,node的调试比较难,往往不如写测试来的快,推荐学习一下
- 理解最小问题思想,培养程序员该有的强大的内心
- ava的基本用法
- 理解断言的用法(注内置断言,不需要assert/should/expect等)
- 理解测试生命周期
- 理解箭头函数、generator、promise等用法
- 理解如何模拟数据
- 理解http下的supertest测试
- 理解测试覆盖率
- 理解基于gulp自动化测试方法
如果有兴趣,可以去了解更多bdd/tdd内容,甚至是cucumber.js
你无论如何都要会的:调试
调试有3种方法
- node debug(太挫了,如果不是c,了解gdb、adb之类的人不推荐用)
- node-inspector(推荐4※)
- tdd/bdd(推荐5※)
作为基础技能掌握就好,实际开发推荐vscode
教程见 https://github.com/i5ting/vsc
欢迎关注我的公众号【node全栈】
联系我,更多交流
mark
mark。
mark
用
typescript来写koa2真是爽爆了。@hellopao 确实,不过面向更多人,还是要保守一些的,兄弟,多来分享一些ts和koa2的经验啊
@hellopao https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/koa/koa.d.ts 分享一个当时自己写的
koa2描述文件:)@DavidCai1993 嗯,一直在用你写的这个,nice job。
我加了
koa-router,koa-bodyparser,koa-static,前两个已经merge了。@hellopao 赞!
@DavidCai1993 @hellopao 好基友就是这样产生的,哈哈
赞! 自豪地采用 CNodeJS ionic
坐等书出版!
@alsotang 广告已去
mark
今天被osc头条了,哈哈
👍 自豪地采用 CNodeJS ionic
mark
赞一个
🐴
mark
赞
赞一个
mark
来自:https://github.com/manxisuo
大赞啊!正在找这方面相关的教程。
Mark
来自酷炫的 CNodeMD
mark
Mark
赞赞
Mark From Noder
mark
mark
赞! nodejs 单元测试有推荐教程不
现阶段并不是特别看好
async await的es2016语法,另外也不推荐co。一个bluebird其实可以搞定所有异步场景了。async await连并发执行类似于Promise.all都不支持,而且还有限制不能把class的constructor写成async function,另外一旦把函数写成了async函数,只能用await来调用。但如果写成promise A+,await,yield,then三种方式可以随意使用,非常方便。 另外bluebird效率非常高,bluebird.coroutine + generator比原生的直接用generator执行效率还高一些,bluebird的Promise也比原生执行效率高得多,功能也多。唯一觉得不是特别完善的地方在于Promise.all不带concurrency并发数限制的支持,不过也可以用Promise.map模拟。bluebird.coroutine语法其实也很类似async await了,只是略微有点verbose:另外关于
eslint,还是建议采用eslint-config-airbnb-base或者如果用React的话可以用eslint-config-airbnb。里面有非常多的检查搭配vscode几乎可以减少一半代码中的错误编辑期间都可以看到及时改正,觉得比standard要完善一些。另外standard默认不带分号感觉不太舒服,虽然也可以改配置,但个人不太喜欢。@andyhu 这个说的有问题吧
await马上就变成native实现了,所以大势所趋的。另外await支持Promise.all的,concurrency类的只能借助扩展的如bb类的库
@i5ting
await不支持吧?以前可以await* [async_func1, async_func2],现在这个语法取消了啊?async await我也用,但觉得很多时候功能太欠缺,写的稍微复杂点就得一半全部用 promise 或者 coroutine@andyhu 是这样的,支持
这是并发正确的写法
@andyhu promise化已经不可逆了。。。。所以未来是await + promise的天下,最近node会发布async/await,好期待啊,再也不用babel了
马克 不错的文章<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
赞 还可以附带 JSON Web Tokens(koa-jwt)、bookshelf(mysql ORM)、turbolinks
@i5ting 嗯,的确是,最好import export node 7 或者node 8赶紧给完善下,就真的是写代码非常舒服了。babel 好是好,不过太慢了
@hxh1246996371 哈哈,后面的拼错了,是turbolinks吧
@andyhu es6的模块貌似还没有完善呢。。。。不过这更新已经是挺快的了
mark
坐等await 技术栈更新
现在正逐步加强自己测试和调试的基础能力
@DavidCai1993 弱弱问下 es6下
import React, {Component} from 'react', 若转为 typescript写法, 该如何书写呢?技术发展太快,时不我待,fighting!
仍然不过时,不过可能要加一个ts了
Koa这个词天天在眼前晃,到底该怎么读啊?
@ReakingAd 抠啊
@m31271n 学坏了,哈哈
@i5ting 看来以后只能打打拼音了。kōu ā
我是小白学了一个月的node用的是express框架,请问现在直接去学koa好,还是再等等好
@i5ting 可以用AVA代替Mocha?我最近在用Mocha。。。
@sunfeng90 可以完全替代,执行速度和新特性支持上有点优势,其他都一样
@HmhWz 先精通你会的再说,不要急,也不要贪多
测试回复
mark
写了几个月 nodejs,对前端知识的汲取少了好多,本来就是前端😭 node 有毒,我要找前端工作😯不过 node挺好玩的😜
来自酷炫的 CNodeMD