CNode

Node.js最新Web技术栈(2016年4月)

精华
分享
Ii5ting发布于10 年前最后回复9 年前58 回复42546 浏览0 收藏

Node.js最新Web技术栈(2016年4月)

上一次的发布的是精华 Node.js最新Web技术栈(2015年5月),感谢大家喜爱,值此koa2.0发布后,决定再次升级技术栈

Node.js是比较简单的,只有你有前端js基础,那就按照我的办法来吧!一周足矣,虽然这版上了es语法,但依然是可以简单写,也可以难写,参见《全栈工程师之路-Node.js》,里面讲了Node.js和全栈相关的思考,整体对未来Node.js比较看好

Screen-Shot-2016-04-01-at-1.52.56-PM.jpg

核心变更:es语法支持

相比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,其他基本都一样

Why AVA?

  • 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全栈】

node全栈.png

联系我,更多交流

xiaoweiquan.jpeg

查看回复

回复 (58)

I
i5ting#2·10 年前
引用 DavidCai1993@hellopao 赞!

@DavidCai1993 @hellopao 好基友就是这样产生的,哈哈

D
darknighten#3·10 年前

赞! 自豪地采用 CNodeJS ionic

A
alsotang#4·10 年前

坐等书出版!

I
i5ting#5·10 年前
引用 alsotang坐等书出版!

@alsotang 广告已去

W
WangCao#6·10 年前

mark

I
i5ting#7·10 年前

今天被osc头条了,哈哈

S
solarhell#8·10 年前

🐴

J
JustinLiao1314#9·10 年前

mark

M
manxisuo#10·10 年前
W
wturi#11·10 年前

Mark From Noder

X
xrr20160322#12·10 年前

mark

J
jinwyp#13·10 年前

坐等await 技术栈更新

J
jkiss#14·10 年前

现在正逐步加强自己测试和调试的基础能力

R
ReakingAd#15·9 年前

Koa这个词天天在眼前晃,到底该怎么读啊?

I
i5ting#17·9 年前
引用 m31271n@ReakingAd 抠啊

@m31271n 学坏了,哈哈

M
m31271n#18·9 年前
引用 i5ting@m31271n 学坏了,哈哈

@i5ting 看来以后只能打打拼音了。kōu ā

H
HmhWz#19·9 年前

我是小白学了一个月的node用的是express框架,请问现在直接去学koa好,还是再等等好

L
luogue#20·9 年前

测试回复

J
JasonBoy#21·10 年前

mark

2
21614306#22·10 年前

mark。

D
devil-gkz#23·10 年前

mark

H
hellopao#24·10 年前

typescript来写koa2真是爽爆了。

I
i5ting#25·10 年前
引用 hellopao用typescript来写koa2真是爽爆了。

@hellopao 确实,不过面向更多人,还是要保守一些的,兄弟,多来分享一些ts和koa2的经验啊

H
hellopao#27·10 年前
引用 DavidCai1993@hellopao https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/koa/koa.d.ts 分享一个当时自己写的...

@DavidCai1993 嗯,一直在用你写的这个,nice job。

我加了koa-router,koa-bodyparser,koa-static,前两个已经merge了。

2
24365#28·10 年前

👍 自豪地采用 CNodeJS ionic

L
LukeCG#29·10 年前

mark

W
welefen#30·10 年前

赞一个

W
wangchi#31·10 年前

K
kenshinhu#32·10 年前

赞一个

W
wy373226722#33·10 年前

大赞啊!正在找这方面相关的教程。

I
iyuq#34·10 年前

Mark

来自酷炫的 CNodeMD

O
oyosc#35·10 年前

mark

I
ichengweb#36·10 年前

Mark

N
nqdy666#37·10 年前

赞赞

T
thebeautyoflove#38·10 年前

mark

1
13241491189#39·10 年前

mark

M
mofengfly#40·10 年前

赞! nodejs 单元测试有推荐教程不

A
andyhu#41·10 年前

以前对generator支持的promise的只有co

现阶段并不是特别看好 async await 的es2016语法,另外也不推荐 co。一个 bluebird 其实可以搞定所有异步场景了。 async await 连并发执行类似于 Promise.all 都不支持,而且还有限制不能把 classconstructor 写成 async function,另外一旦把函数写成了 async 函数,只能用 await 来调用。但如果写成 promise A+await, yieldthen 三种方式可以随意使用,非常方便。 另外 bluebird 效率非常高,bluebird.coroutine + generator 比原生的直接用 generator 执行效率还高一些, bluebirdPromise 也比原生执行效率高得多,功能也多。唯一觉得不是特别完善的地方在于 Promise.all 不带 concurrency并发数限制的支持,不过也可以用 Promise.map模拟。 bluebird.coroutine 语法其实也很类似 async await了,只是略微有点 verbose

import { delay as sleep, coroutine as co } from 'bluebird';
// async await:
const a = async() => {
	console.time('slept');
	await sleep(1000);
	console.timeEnd('slept');
}
const b = co(function*(){
	console.time('slept');
	yield sleep(1000);
	console.timeEnd('slept');
});

await a();
b();

另外关于eslint,还是建议采用 eslint-config-airbnb-base 或者如果用 React 的话可以用 eslint-config-airbnb。里面有非常多的检查搭配 vscode 几乎可以减少一半代码中的错误编辑期间都可以看到及时改正,觉得比 standard 要完善一些。另外 standard 默认不带分号感觉不太舒服,虽然也可以改配置,但个人不太喜欢。

I
i5ting#42·10 年前
引用 andyhu以前对generator支持的promise的只有co 现阶段并不是特别看好 async await 的es2016语法,另外也不推荐 co。一个 bluebird 其实可以搞定所有异步场景了...

@andyhu 这个说的有问题吧

await马上就变成native实现了,所以大势所趋的。另外await支持Promise.all的,concurrency类的只能借助扩展的如bb类的库

A
andyhu#43·10 年前
引用 i5ting@andyhu 这个说的有问题吧 await马上就变成native实现了,所以大势所趋的。另外await支持Promise.all的,concurrency类的只能借助扩展的如bb类的库

@i5ting await 不支持吧?以前可以 await* [async_func1, async_func2],现在这个语法取消了啊? async await 我也用,但觉得很多时候功能太欠缺,写的稍微复杂点就得一半全部用 promise 或者 coroutine

I
i5ting#44·10 年前
I
i5ting#45·10 年前
引用 andyhu@i5ting await 不支持吧?以前可以 await [async func1, async func2],现在这个语法取消了啊? async await 我也用,但觉得很多时候功能太欠...

@andyhu promise化已经不可逆了。。。。所以未来是await + promise的天下,最近node会发布async/await,好期待啊,再也不用babel了

D
didida#46·10 年前

马克 不错的文章I‘m webapp-cnodejs-vue

H
hxh1246996371#47·10 年前

赞 还可以附带 JSON Web Tokens(koa-jwt)、bookshelf(mysql ORM)、turbolinks

A
andyhu#48·10 年前
引用 i5ting@andyhu promise化已经不可逆了。。。。所以未来是await + promise的天下,最近node会发布async/await,好期待啊,再也不用babel了

@i5ting 嗯,的确是,最好import export node 7 或者node 8赶紧给完善下,就真的是写代码非常舒服了。babel 好是好,不过太慢了

I
i5ting#49·10 年前
引用 hxh1246996371赞 还可以附带 JSON Web Tokens(koa jwt)、bookshelf(mysql ORM)、turbolinks

@hxh1246996371 哈哈,后面的拼错了,是turbolinks吧

I
i5ting#50·10 年前
F
fengyun2#51·10 年前
引用 DavidCai1993@hellopao https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/koa/koa.d.ts 分享一个当时自己写的...

@DavidCai1993 弱弱问下 es6下 import React, {Component} from 'react', 若转为 typescript写法, 该如何书写呢?

L
laokey#52·10 年前

技术发展太快,时不我待,fighting!

I
i5ting#53·9 年前

仍然不过时,不过可能要加一个ts了

S
sunfeng90#54·9 年前
引用 i5ting今天被osc头条了,哈哈

@i5ting 可以用AVA代替Mocha?我最近在用Mocha。。。

I
i5ting#55·9 年前
引用 sunfeng90@i5ting 可以用AVA代替Mocha?我最近在用Mocha。。。

@sunfeng90 可以完全替代,执行速度和新特性支持上有点优势,其他都一样

I
i5ting#56·9 年前
L
lastIndexOf#57·9 年前

mark

H
Harveytwo#58·9 年前

写了几个月 nodejs,对前端知识的汲取少了好多,本来就是前端😭 node 有毒,我要找前端工作😯不过 node挺好玩的😜

来自酷炫的 CNodeMD

参与回复
登录后即可参与回复。登录