目錄
一、創建專案
首頁 web前端 js教程 透過Node.js使用Koa進行專案搭建

透過Node.js使用Koa進行專案搭建

Jun 13, 2018 am 11:38 AM
node.js

時下前端工程師有很多人比較關注NodeJs以及express 框架或Koa 框架之類的新技術。難得我最近閒時較多,利用一下舊曆新年尚未正式到來的這片閒暇,也來涉足其中,一窺其中奧妙。

Koa 是由Express 原班人馬打造的超輕量服務端框架

與Express 相比,除了自由度更高,可以自行引入中間件之外,更重要的是使用了ES6 async,從而避免了回呼地獄

不過也是因為程式碼升級,所以Koa2 需要v7.60 以上的node.js 環境

一、創建專案

手動建立一個專案目錄,然後快速產生一個 package.json 檔案

npm init -y
登入後複製

安裝koa    //目前版本2.4.1

npm install koa -S
登入後複製

然後建立一個app.js

// app.js

const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
 ctx.body = 'Wise Wrong';
});

app.listen(3000);
登入後複製

最後在package.json 中加入啟動指令

一個最基礎的koa 應用程式就這樣完成了

##可以執行npm start 並在瀏覽器訪問http://localhost:3000/ 查看效果

如果覺得手動建立專案太過繁瑣,可以使用腳手架koa-generato 來產生專案

npm install koa-generator -g
登入後複製
koa2 project_name
登入後複製

然後在專案下npm install 安裝依賴,npm start 啟動專案

如果是剛接觸koa,建議先看完這篇博客,再使用腳手架工具,這樣能更好的理解各個依賴包的作用

二、設定路由

上面app.js 中有一個ctx,這是一個Koa 提供的Context 對象,封裝了request 和response

每次 HTTP Request 都會建立一個Context 物件

我們可以透過Context.request.path 來取得使用者請求的路徑,然後透過Context.response.body 給使用者發送內容

Koa 預設的回傳類型是text/plain,如果要回傳一個html 檔案(或一個模組檔案),就需要修改Context.response.type

另外,Context.response 可以簡單寫,例如Context.response.type 簡寫為Context.type,Context.response .body 簡寫為Context.type

在專案下建立一個存放html 檔案的目錄views,並在該目錄下建立一個index.html,然後修改app.js

// app.js// 原生路由

const Koa = require('koa');
const fs = require('fs');
const app = new Koa();

app.use(async (ctx, next) => {
 if (ctx.request.path === '/index') {
 ctx.type = 'text/html';
 ctx.body = fs.createReadStream('./views/index.html');
 } else {
 await next();
 }
});

app.listen(3000);
登入後複製

然後在瀏覽器中造訪http://localhost:3000/index 就能看到index.html 頁面,而造訪別的位址則是not found

這樣處理url 顯得特別笨拙,所以我們需要引入路由中間件koa-router

npm install koa-router -S
登入後複製

要注意的是,在導入koa-router 的時候,需要在最後加上一個括號:

const router = require('koa-router')();
登入後複製

相當於:

const koaRouter = require('koa-router');
const router = koaRouter();
登入後複製

建立一個routes 目錄,用來存放路由文件,並在目錄下建立index.js

#

// routes/index.js

const fs = require('fs');
const router = require('koa-router')()

router.get('/index', async (ctx, next) => {
 ctx.type = 'text/html';
 ctx.body = fs.createReadStream('./views/index.html');
});

module.exports = router
登入後複製

這裡也可以使用prefix 方法,為檔案中的所有介面新增一個baseUrl

// router.prefix('/about')

修改app.js

// app.js

const Koa = require('koa');
const app = new Koa();

const index = require('./routes/index')
app.use(index.routes(), index.allowedMethods())

app.listen(3000);
登入後複製

上面的allowedMethods 用於校驗請求的方法,如果用post 請求存取get接口,就會直接返回失敗

另外,還可以在url 中加入變量,然後透過Context.params.name 存取

router.get('/about/:name', async (ctx, next) => {
 ctx.body = `I am ${ctx.params.name}!`;
});
登入後複製

三、靜態資源

在上面的index.html 中,如果需要引入css 等靜態資源,就需要用到koa-static

npm install koa-static -S
登入後複製

建立一個目錄public 用來存放靜態資源

 接著在app.js 中加入以下程式碼

const static = require('koa-static');
// 将 public 目录设置为静态资源目录
const main = static(__dirname + '/public');
app.use(main);
登入後複製

事實上,這三行程式碼還可以最佳化

app.use(require('koa-static')(__dirname + '/public'));
登入後複製

然後就能在index.html 中引入對應的檔案了

 

四、模板引擎

上面的路由是使用fs 模組直接讀取html 檔案

開發的時候更建議使用koa-views中間件來渲染頁面

npm install koa-views -S
登入後複製

在app.js 中將views 目錄設定為模版目錄

const views = require('koa-views')
app.use(views(__dirname + '/views'));
登入後複製

然後在路由檔案中,就能使用render 方法了

// routes/index.js

const router = require('koa-router')()

router.get('/index', async (ctx, next) => {
 await ctx.render('index');
});

module.exports = router
登入後複製

以上是直接渲染html 檔案的方法,如果要引入模板引擎,可以加入extension 欄位來設定模版類型

app.use(views(__dirname + '/views', {
 extension: 'pug' // 以 pug 模版为例
}))
登入後複製
五、結語

如果將Express 看作webstorm,那麼Koa就是sublime

當Express 流行的時候,其冗餘的依賴項被很多開發者所詬病

所以Express 團隊將  Express 拆卸得只剩下最基本的骨架,讓開發者自行組裝,這就是Koa

正如文中所說,從零開始太過繁瑣,可以使用腳手架koa-generato 來快速開發

不過我更推薦,在熟悉了Koa 之後,搭一個適合自己項目的腳手架

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

express與koa的使用比較(詳細教學)

在vue中首次使用stylus安裝方法(詳細教程)

Vue框架中有關goods元件開發

#

以上是透過Node.js使用Koa進行專案搭建的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
圖文詳解Node V8引擎的記憶體和GC 圖文詳解Node V8引擎的記憶體和GC Mar 29, 2023 pm 06:02 PM

這篇文章帶大家深入了解NodeJS V8引擎的記憶體和垃圾回收器(GC),希望對大家有幫助!

一文聊聊Node中的記憶體控制 一文聊聊Node中的記憶體控制 Apr 26, 2023 pm 05:37 PM

基於無阻塞、事件驅動建立的Node服務,具有記憶體消耗低的優點,非常適合處理海量的網路請求。在海量請求的前提下,就需要考慮「記憶體控制」的相關問題了。 1. V8的垃圾回收機制與記憶體限制 Js由垃圾回收機

聊聊如何選擇一個最好的Node.js Docker映像? 聊聊如何選擇一個最好的Node.js Docker映像? Dec 13, 2022 pm 08:00 PM

選擇一個Node的Docker映像看起來像是小事,但是映像的大小和潛在漏洞可能會對你的CI/CD流程和安全造成重大的影響。那我們要如何選擇一個最好Node.js Docker映像呢?

Node.js 19正式發布,聊聊它的 6 大功能! Node.js 19正式發布,聊聊它的 6 大功能! Nov 16, 2022 pm 08:34 PM

Node 19已正式發布,以下這篇文章就來帶大家詳解了解Node.js 19的 6 大特性,希望對大家有幫助!

深入聊聊Node中的File模組 深入聊聊Node中的File模組 Apr 24, 2023 pm 05:49 PM

文件模組是對底層文件操作的封裝,例如文件讀寫/打開關閉/刪除添加等等文件模組最大的特點就是所有的方法都提供的**同步**和**異步**兩個版本,具有sync 字尾的方法都是同步方法,沒有的都是異

一起聊聊Node中的事件循環 一起聊聊Node中的事件循環 Apr 11, 2023 pm 07:08 PM

事件循環是 Node.js 的基本組成部分,透過確保主執行緒不被阻塞來實現非同步編程,了解事件循環對建立高效應用程式至關重要。以下這篇文章就來帶大家深入了解Node中的事件循環 ,希望對大家有幫助!

聊聊用pkg將Node.js專案打包為執行檔的方法 聊聊用pkg將Node.js專案打包為執行檔的方法 Dec 02, 2022 pm 09:06 PM

如何用pkg打包nodejs可執行檔?以下這篇文章跟大家介紹一下使用pkg將Node專案打包為執行檔的方法,希望對大家有幫助!

node無法用npm指令怎麼辦 node無法用npm指令怎麼辦 Feb 08, 2023 am 10:09 AM

node無法用npm指令是因為沒有正確配置環境變量,其解決方法是:1、開啟“系統屬性”;2、找到“環境變數”->“系統變數”,然後編輯環境變數;3、找到nodejs所在的資料夾;4、點選「確定」即可。

See all articles