聊聊Nodejs
Nodejs从诞生至发展,从15年底4.0版本发布到上月末10.0正式发布经历不到3年时间,足以证明Nodejs社区的蓬勃发展以及开发者们对于Nodejs的重视,当下,在无数的踩坑与完善后,Nodejs渐渐成熟走向商业化应用。在这个历程中不得不说的是Express,Koa框架,值得一提的说它们均来自同一作者TJ--node圈中的传奇人物,它们诞生于Nodejs发展的不同时期,在Ecmascript语言规范的发展中前行。
框架 | 说明 | 对应 | 特性 |
express | web框架 | es5 | 回调嵌套 |
koa | web框架 | es6 | Generator函数+yield语句+Promise |
koa2 | web框架 | es7 | async/await+Promise |
在Express诞生前,没有成熟轮子,需要通过Nodejs基础模块构建应用
var http = require('http')
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' })
res.end('Hello World\n')
}).listen(1337, "127.0.0.1")
console.log('Server running at http://127.0.0.1:3000/')
通过如上代码完成hello world开启应用构建之路
聊聊express
Express脱颖而出,E xpress--基于NodeJS平台,快速,开发,极简的web开发框架, 这来自Express官方描述。 Express包含application request response router 四大模块。 Express在NodeJS的基础上完成二次抽象,封装处理细节向上提供丰富的模块方法以用来构建web应用,在此开发者只需通过这些功能方法开发中间件,扩展构建Web应用。作为两个框架中最早诞生者,经过长时间的发展完善,Express更为成熟,资料丰富。在node圈中如同Dom库中Jquery版的存在,但是如上表所示,Express基于Es5语法,通过回调组合逻辑(类比如同jQuery中的ajax方法),回调的硬伤在于不可组合,难以捕获,在复杂逻辑中会包含大量回调嵌套,也就是常说的回调地狱,以及调试问题。但Express也足以成为NodeJS框架中的经典,当下Es6,Es7盛行,可以通过相关三方库完善支持Promise或Async/Await来弥补
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('Hello World!')
})
var server = app.listen(3000, function () {
var host = server.address().address
var port = server.address().port
console.log('Example app listening at http://%s:%s', host, port)
})
聊聊koa
Koa 编写 web 应用,通过组合不同的 Generator,可以免除重复繁琐的回调函数嵌套, 并极大地提升错误处理的效率。Koa 不在内核方法中绑定任何中间件, 它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。 这来自Koa 官方描述 。 Koa 中也包含4个主要模块,Application、Request、Response、Context。 Koa 定位为基础框架,相比Express更加小巧,几乎所有功能都通过中间件来完成,相应的Router模块从核心模块中去除,需通过中间件的形式集成,Koa 中三方router模块近20余种,开发者可以根据需求选择需要的模块集成或封装自己的模块用于构建应用,非常灵活,在Koa 几乎没有任何限制去自由构建自己的应用,同时Koa 不断追随Esmascript规范,解决Express痛点,从一代generator函数到二代Async/Await,备受青睐。
const Koa = require('koa')
const app = new Koa()
app.use(async ctx => {
ctx.body = 'Hello World'
})
app.listen(3000)