如何评价 Node.js 的koa框架

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何评价 Node.js 的koa框架相关的知识,希望对你有一定的参考价值。

Node.js非常适用于Web开发,但是现在无论是一个网站,还是Web App都已经成为包括很多不同部分,如前端、数据库、业务模块、功能模块等等的大型项目,使用Node.js从零开始进行Web开发,也许大中型团队能够 胜任 参考技术A koa2 完全抛弃了generator和co的做法,而是使用async/await来做异步开发。

## 不同
1. koa和express在表现上的一点不同是采用ctx一个参数来调用中间件,而不是express的req, res。
其实在使用上还是个人认为是更方便了的。

2. 然后是在中间件连接的方式上有所不同。
express的设计是串联的,设计思路超级简洁。
koa的某一个中间件可以自行选择之后中间件的执行位置的。

## 举例
比如一个服务器处理时间/日志的中间件的开发:
express:request
进来,记录时间到request._startTime上。绑定一个函数到response的'end','finish'以及
response.socket的'error','close'事件上。那个函数会用当前时间和startTime做差,算出运行时间。
koa2:
```js
const xTime = async (ctx,next)=>
let start = new Date
await next()
ctx.set('X-Response-Time', (new Date) - start) + 'ms')

```
这是在功能开发上,在错误处理上的友好度就更高了。
没有特意抹黑express的中间件开发,那个express版的计时器是express自带的服务器日志中间件morgan的实现。

## 社区
express的社区还是大。
koa本来就小,还被从koa1转koa2一折腾,就更小了。
而现在koa2还在alpha版,koa及其插件的开发速度比较没有保证。
你找到一个中间件,如果是express的,得转过来。如果是koa的,一般也得再转一次。
比如我使用的passportjs,github有koa版koa-passport,就分koa1版本和koa2版本的,选择时得注意一下。

## 个人评价
koa2好用,设计上的确有优势。优势不在能实现更强的功能,而是可以更简单地完成功能。
koa2社区远不如express,原因之一是~~因为koa2的正式版离发行估计还得3~6个月。~~koa的正式版是koa1。
koa1在思想上与koa2是一致的,但是koa2的实现更漂亮。
有koa1到koa2的中间件封装函数`koa-convert`。
而一般通用的中间件都有koa版,或者能够轻松的转为koa版。本回答被提问者采纳

最新Node.js框架:Koa 2 实例demo


koa2-demo


这个项目是express风格的最新的Koa 2项目的示例,已集成到里,算是集成一些所谓的最佳实践吧


Teck Stack


  • Koa 2

  • nodemon + runkoa(支持async/await,且不需关心babel)

  • pm2 for deployment(服务器部署)

  • express-style middlewares

    • koa-router

    • koa-views

    • koa-static

    • koa-bodyparser


Getting Start


git clone https://github.com/17koa/koa2-demo.gitcd koa2-demo npm install npm start

open in browser


启动方式


最简单启动方式


node bin/run


最常用的集成nodemon的方式,代码变动会自动重载(其实就是nodemon去执行bin/run)


npm start


支持pm2部署


 #npm run pm2 pm2 start bin/run 


支持koa2的3种中间件写法


Koa 2是一个 middleware framework, 它提供了 3 种不同类型的中间件写法


  • common function

  • async function(新增)

  • generatorFunction


详见



支持view层多种模板


koa-views is using under the hood.



需要注意的koa2使用的koa-views也是下一版本的koa-views,当前项目已经处理过了,不需要再处理的,哈哈


jade


npm i -S jade


in app.js


app.use(views(__dirname + '/views', {  extension: 'jade'
}));


ejs


npm i -S ejs


in app.js


app.use(views(__dirname + '/views-ejs', {  extension: 'ejs' 
}));


目录结构


  koa2-demo git:(master) tree . -L 2.

├── LICENSE
├── README.md
├── app.js
├── bin
   ├── run
   └── www
├── node_modules
   ├── co
   ├── debug
   ├── ejs
   ├── jade
   ├── koa
   ├── koa-bodyparser
   ├── koa-convert
   ├── koa-json
   ├── koa-logger
   ├── koa-onerror
   ├── koa-router
   ├── koa-static
   ├── koa-views
   ├── nodemon
   └── runkoa
├── package.json
├── public
   ├── images
   ├── javascripts
   └── stylesheets
├── routes
   ├── index.js
   └── users.js
├── views
   ├── error.jade
   ├── index.jade
   └── layout.jade
└── views-ejs
   
├── error.ejs
   
└── index.ejs

24 directories, 13 files


说明

  • bin/run(runkoa执行bin/www)

  • bin/www是常规koa启动文件,和express的一样

  • views是放默认的jade文件

  • views-ejs是放ejs文件


推荐


如果你喜欢express风格的生成,推荐


如果你喜欢babel + koa2可以参考


全文完


以上是关于如何评价 Node.js 的koa框架的主要内容,如果未能解决你的问题,请参考以下文章

Node.js的web框架koa详解

Koa--基于Node.js平台的下一代web开发框架的安装

koa-基于node.js平台的下一代web开发框架入门

node.js系列10 koa2框架

node.js中 koa 框架的基本使用方法

Node.js-Koa2框架生态实战-从零模拟新浪微博