node.js 13 Web框架Koa

上一篇:

之前我們已經介紹過node.js的經典Web框架Express ( ),而Koa框架是由Express框架的原班人馬開發的。

node.js 13 Web框架Koa

koa

Koa的官網介紹Koa的時候認為Koa是node.js下一代Web框架。據瞭解,阿里內部也在使用Koa。

Koa相比於Express一個最大的特點就是引入了async/await,從而避免了回調函數嵌套。這也是為什麼我在寫這一篇之前介紹了node.js的異步以及async/await。

從歷史使用量上來說,Express框架是領先的,但是Koa在新的項目中受歡迎程度還是比較高的。

Koa安裝運行

  1. 安裝Koa "npm install koa --save"
<code>D:\\Projects\\nodejs\\NodeDemo\\koatest>npm install koa --save
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN [email protected] No description
npm WARN [email protected] No repository field.

+ [email protected]
added 43 packages from 23 contributors and audited 55 packages in 21.652s
found 0 vulnerabilities/<code>
  1. Koa腳手架 Koa-generator

跟Express一樣,Express有express-generator,Koa同樣也有自己的腳手架,可以用來生成項目。運行命令"npm install koa-generator -g".

<code>D:\\Projects\\nodejs\\NodeDemo\\koatest>npm install koa-generator -g 

D:\\Program Files\\nodejs\\node_global\\koa2 -> D:\\Program Files\\nodejs\\node_global\\node_modules\\koa-generator\\bin\\koa2
D:\\Program Files\\nodejs\\node_global\\koa -> D:\\Program Files\\nodejs\\node_global\\node_modules\\koa-generator\\bin\\koa
+ [email protected]
added 5 packages from 4 contributors in 19.502s/<code>
  1. 使用Koa2創建項目

注意命令中要使用Koa2,而不是Koa。如果使用Koa那麼表示使用Koa1。

<code>D:\\Projects\\nodejs\\NodeDemo\\koatest>koa2 -e
destination is not empty, continue? [y/N] y

create : .
create : ./package.json
create : ./app.js
create : ./public/javascripts
create : ./public
create : ./public/stylesheets
create : ./public/stylesheets/style.css
create : ./routes
create : ./routes/index.js
create : ./routes/users.js
create : ./public/images
create : ./views
create : ./views/index.ejs
create : ./views/error.ejs
create : ./bin
create : ./bin/www

install dependencies:
> cd . && npm install

run the app:
> SET DEBUG=koa* & npm start koatest/<code>

這裡我們使用使用了命令"koa2 -e",-e表示使用"ejs"作為模板引擎。由於我們在當前目錄下創建,所以命令中不需要添加目錄名。如果我們需要創建一個新的目錄,並在該目錄下創建項目,使用"koa2 -e <project>"即可。/<project>

  1. 安裝依賴"npm install",這裡就包括 "koa-views"中間件模板引擎,以及其他依賴模塊
<code>  "dependencies": {
"debug": "^4.1.1",
"ejs": "~2.3.3",
"koa": "^2.7.0",
"koa-bodyparser": "^4.2.1",
"koa-convert": "^1.2.0",
"koa-json": "^2.0.2",
"koa-logger": "^3.2.0",
"koa-onerror": "^4.1.0",
"koa-router": "^7.4.0",
"koa-static": "^5.0.0",
"koa-views": "^6.2.1"
},/<code>
  1. 運行 "npm start"
<code>D:\\Projects\\nodejs\\NodeDemo\\koatest>npm start

> [email protected] start D:\\Projects\\nodejs\\NodeDemo\\koatest
> node bin/www/<code>

此時就可以通過瀏覽器進行訪問了。

  1. 首頁訪問 http://localhost:3000/


node.js 13 Web框架Koa

Koa2 首頁

Koa2 路由

上面訪問了主頁,為什麼會出現"Hello Koa2!"?這是由Koa2的路由模塊來處理的。

Koa2的路由模塊是koa-router,我們在安裝依賴時通過命令"npm install"已經安裝在當前目錄下了。所以在訪問主頁時,koa-router已經起作用了。那麼這個路由是如何起作用的?

  1. 創建路由

在<project>/routes目錄下創建路由,以Koa2默認創建的index.js路由為例。先引入"koa-router"模塊,再針對訪問路徑進行處理。/<project>

<code>const router = require('koa-router')()

router.get('/', async (ctx, next) => {
await ctx.render('index', {
title: 'Hello Koa 2!'
})
})/<code>

注意上面的ctx.render中有一個參數'index',這就指向了我們的模板引擎ejs中的<project>/views/index.ejs。/<project>

<code>


<title>
<link>




EJS Welcome to



/<code>

這裡從router中將title鍵值對傳到了index.ejs模板中。

  1. 在入口app.js中註冊index路由
<code>// routes
app.use(index.routes(), index.allowedMethods())/<code>

到這裡,一個完整的路由工作就結束了。

歡迎關注本號,後續會對koa以及node.js其他功能作進一步介紹。


分享到:


相關文章: