什么是Koa?
Koa 是一個(gè)新的 web 框架,由 Express 幕后的原班人馬打造, 致力于成為 web 應(yīng)用和 API 開(kāi)發(fā)領(lǐng)域中的一個(gè)更小、更富有表現(xiàn)力、更健壯的基石。 通過(guò)利用 async 函數(shù),Koa 幫你丟棄回調(diào)函數(shù),并有力地增強(qiáng)錯(cuò)誤處理。 Koa 并沒(méi)有捆綁任何中間件, 而是提供了一套優(yōu)雅的方法,幫助您快速而愉快地編寫(xiě)服務(wù)端應(yīng)用程序。
Koa vs Express
Koa使用promises和async函數(shù)來(lái)擺脫回調(diào)地獄的應(yīng)用并簡(jiǎn)化錯(cuò)誤處理。它暴露自己ctx.request和ctx.response對(duì)象而不是節(jié)點(diǎn)req和res對(duì)象。另一方面,Express 使用其他屬性和方法擴(kuò)充節(jié)點(diǎn)req和res對(duì)象,并包括許多其他“框架”功能,例如路由和模板,Koa沒(méi)有。
因此,如果你希望更接近node.js和傳統(tǒng)的node.js樣式編碼,你可能希望堅(jiān)持使用Connect / Express或類似的框架。如果你想擺脫回調(diào),請(qǐng)使用Koa。
總結(jié)
Koa是一個(gè)比Express更精簡(jiǎn),使用node新特性的中間件框架,相比之前express就是一個(gè)龐大的框架
如果你有興趣了解更多不同,請(qǐng)?jiān)L問(wèn)Koa vs Express
Koa 項(xiàng)目搭建
注意,本篇教程面向有一定Koa使用經(jīng)驗(yàn)的用戶。如果,你還不了解Koa,請(qǐng)先看下面的文檔Koa 中文文檔
Koa 文檔過(guò)于精簡(jiǎn),雖然將每一個(gè)API都進(jìn)行解釋說(shuō)明,但還是很難將其組織起來(lái)進(jìn)行應(yīng)用,對(duì)于初學(xué)者來(lái)說(shuō)可謂是很不友好。
筆者第一個(gè)Koa項(xiàng)目,將所有接口,邏輯,配置等全部寫(xiě)在了app.js中,雖說(shuō)完美運(yùn)行,但是可讀性,可維護(hù)性極差,所以一個(gè)好的目錄結(jié)構(gòu)尤為重要
目錄創(chuàng)建
依賴安裝
創(chuàng)建好項(xiàng)目目錄后我們需要安裝一些依賴,來(lái)供我們使用
可以根據(jù)自己的需求進(jìn)行選擇,但是一些依賴是必須安裝的
后面的內(nèi)容會(huì)講解每個(gè)插件有什么用,如何去用。
目錄詳解
config
config是我們的配置文件,比如:
實(shí)際運(yùn)用:
database.config.js
export default { database: '', username: '', password: '', dialect: '', host: '', port: 3306}具體配置之后會(huì)跟大家仔細(xì)講解。
models
models文件夾主要是我們的數(shù)據(jù)庫(kù)模型(ORM),存儲(chǔ)數(shù)據(jù)庫(kù)映射文件,eg:
index.js
import Sequelize from 'sequelize'import config from '../config/database.config'const sequelize = new Sequelize(config)export const user = sequelize.import(__dirname + '/user')export default { user, sequelize}以下序號(hào)代表代碼行號(hào):
controller
controller為控制層,主要處理外部請(qǐng)求。調(diào)用service層,將service返回的內(nèi)容整合后返回給調(diào)用方
舉例:
const user = require('../service/user')const findAllUser = async (ctx) => { const data = ctx.request.body const result = await user.findAllUser(data) ctx.body = send({data: result})}module.exports = { findAllUser}以下序號(hào)代表代碼行號(hào):
service
service作為服務(wù)層主要做相信的業(yè)務(wù)邏輯處理,數(shù)據(jù)處理等,將結(jié)果返回給controller層
舉例:
const db = require('../models/')const findAllUser = async () => { const result = await db.user.findAll() return result}module.exports = { findAllUser}以下序號(hào)代表代碼行號(hào):
routers
router管理我們的路由,也就是接口地址
舉例:
const user = require('../controller/user')const koa_router = require('koa-router');const router = koa_router();router.post('/findAll', user.findAllUser)module.exports = router以下序號(hào)代表代碼行號(hào):
app.js
app.js是我們的入口文件及主文件,我們將router里配置的路由在此引入
const koaBody = require('koa-body') Koa = require('koa'), Router = require('koa-router') router = new Router()const user = require('./routers/user');router.use("/user",user.routes());這樣我們就可以訪問(wèn):ip:port/user/findAll 接口。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注