最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Koa從零搭建到Api實(shí)現(xiàn)項(xiàng)目的搭建方法

 更新時(shí)間:2019年07月30日 11:00:25   作者:冰山工作室  
這篇文章主要介紹了Koa從零搭建到Api實(shí)現(xiàn)項(xiàng)目的搭建方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

什么是Koa?

Koa 是一個(gè)新的 web 框架,由 Express 幕后的原班人馬打造, 致力于成為 web 應(yīng)用和 API 開發(fā)領(lǐng)域中的一個(gè)更小、更富有表現(xiàn)力、更健壯的基石。 通過利用 async 函數(shù),Koa 幫你丟棄回調(diào)函數(shù),并有力地增強(qiáng)錯(cuò)誤處理。 Koa 并沒有捆綁任何中間件, 而是提供了一套優(yōu)雅的方法,幫助您快速而愉快地編寫服務(wù)端應(yīng)用程序。

Koa vs Express

Koa使用promises和async函數(shù)來擺脫回調(diào)地獄的應(yīng)用并簡化錯(cuò)誤處理。它暴露自己ctx.request和ctx.response對(duì)象而不是節(jié)點(diǎn)req和res對(duì)象。另一方面,Express 使用其他屬性和方法擴(kuò)充節(jié)點(diǎn)req和res對(duì)象,并包括許多其他“框架”功能,例如路由和模板,Koa沒有。

因此,如果你希望更接近node.js和傳統(tǒng)的node.js樣式編碼,你可能希望堅(jiān)持使用Connect / Express或類似的框架。如果你想擺脫回調(diào),請使用Koa。

總結(jié)

Koa是一個(gè)比Express更精簡,使用node新特性的中間件框架,相比之前express就是一個(gè)龐大的框架

  • 如果你喜歡diy,很潮,可以考慮Koa,它有足夠的擴(kuò)展和中間件,而且自己寫很簡單
  • 如果你想簡單點(diǎn),找一個(gè)框架啥都有,那么先Express

如果你有興趣了解更多不同,請?jiān)L問Koa vs Express

Koa 項(xiàng)目搭建

注意,本篇教程面向有一定Koa使用經(jīng)驗(yàn)的用戶。如果,你還不了解Koa,請先看下面的文檔Koa 中文文檔

Koa 文檔過于精簡,雖然將每一個(gè)API都進(jìn)行解釋說明,但還是很難將其組織起來進(jìn)行應(yīng)用,對(duì)于初學(xué)者來說可謂是很不友好。

筆者第一個(gè)Koa項(xiàng)目,將所有接口,邏輯,配置等全部寫在了app.js中,雖說完美運(yùn)行,但是可讀性,可維護(hù)性極差,所以一個(gè)好的目錄結(jié)構(gòu)尤為重要

目錄創(chuàng)建

  • config - 配置
  • models - 數(shù)據(jù)庫模型(ROM)
  • controller - 控制器
  • middlewares - 中間件
  • public - 靜態(tài)資源
  • service - 服務(wù)
  • router - 路由
  • app.js - 啟動(dòng)文件

依賴安裝

創(chuàng)建好項(xiàng)目目錄后我們需要安裝一些依賴,來供我們使用

  • babel-core/babel-preset-es2015 - 讓 nodeJs 支持 es6 modules
  • koa - koa2
  • koa-body - request body 解析
  • koa-cache-control - 緩存控制
  • koa-compress - gzip
  • koa-cors - 跨域
  • koa-logger - 日志
  • koa-onerror - 錯(cuò)誤處理
  • koa-router - 路由
  • koa-session - session
  • koa-static - 靜態(tài)資源服務(wù)
  • koa-helmet - 安全
  • md5 - md5 加密
  • mkdirp - 遞歸創(chuàng)建目錄

可以根據(jù)自己的需求進(jìn)行選擇,但是一些依賴是必須安裝的

  • koa - koa2
  • koa-body - request body 解析
  • koa-router - 路由

后面的內(nèi)容會(huì)講解每個(gè)插件有什么用,如何去用。

目錄詳解

config

config是我們的配置文件,比如:

  • 數(shù)據(jù)庫(mysql,oracle,redis等)
  • OSS
  • ...

實(shí)際運(yùn)用:

  • confirg
    • database.config.js(新建)

database.config.js

export default {
 database: '',
 username: '',
 password: '',
 dialect: '',
 host: '',
 port: 3306
}

具體配置之后會(huì)跟大家仔細(xì)講解。

models

models文件夾主要是我們的數(shù)據(jù)庫模型(ORM),存儲(chǔ)數(shù)據(jù)庫映射文件,eg:

  • models
    • index.js - 入口文件
    • user.js - 對(duì)應(yīng)數(shù)據(jù)庫中的user表

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):

  1. 引入sequelize,它是一個(gè)ORM框架,之后會(huì)詳細(xì)講解它的使用
  2. 引入我們之前在config中創(chuàng)建的數(shù)據(jù)庫配置文件呢
  3. 使用sequelize連接數(shù)據(jù)庫
  4. 將本地?cái)?shù)據(jù)庫映射文件導(dǎo)出供我們使用

controller

controller為控制層,主要處理外部請求。調(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):

  1. 獲取請求體
  2. 調(diào)用service層
  3. 將service返回的內(nèi)容返回給調(diào)用者(send是自定義的數(shù)據(jù)格式化方法)

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):

  • 獲取數(shù)據(jù)庫映射文件,因?yàn)橐僮鲾?shù)據(jù)庫
  • 從數(shù)據(jù)庫中查尋全部用戶(db.user.findAll()為sequelize中提供的查詢方法)
  • 返回給controller

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):

  1. 引入controller層
  2. 定義接口類型,地址,調(diào)用方法(post, '/findAll'',findAllUser)

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());

這樣我們就可以訪問:ip:port/user/findAll 接口。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在Node.js中實(shí)現(xiàn)視頻收藏功能

    在Node.js中實(shí)現(xiàn)視頻收藏功能

    在構(gòu)建視頻分享平臺(tái)時(shí),視頻的收藏功能是用戶互動(dòng)的重要組成部分,本文將介紹如何在Node.js應(yīng)用中實(shí)現(xiàn)視頻收藏功能,包括數(shù)據(jù)模型的創(chuàng)建、業(yè)務(wù)邏輯的實(shí)現(xiàn)以及接口的驗(yàn)證測試,需要的朋友可以參考下
    2024-04-04
  • npm ERR! code ELIFECYCLE錯(cuò)誤及解決方法

    npm ERR! code ELIFECYCLE錯(cuò)誤及解決方法

    有時(shí)候在使用npm運(yùn)行命令時(shí),可能會(huì)遇到錯(cuò)誤,本文主要介紹了npm ERR! code ELIFECYCLE錯(cuò)誤及解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • NodeJs+MySQL實(shí)現(xiàn)注冊登錄功能

    NodeJs+MySQL實(shí)現(xiàn)注冊登錄功能

    這篇文章主要為大家詳細(xì)介紹了NodeJs+MySQL實(shí)現(xiàn)注冊登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 基于node.js制作簡單爬蟲教程

    基于node.js制作簡單爬蟲教程

    這篇文章主要為大家詳細(xì)介紹了基于node.js制作簡單爬蟲的教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Node.js 獲取微信JS-SDK CONFIG的方法示例

    Node.js 獲取微信JS-SDK CONFIG的方法示例

    這篇文章主要介紹了Node.js 獲取微信JS-SDK CONFIG的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • nodeJS進(jìn)程管理器pm2的使用

    nodeJS進(jìn)程管理器pm2的使用

    這篇文章主要介紹了nodeJS進(jìn)程管理器pm2的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 在node中使用jwt簽發(fā)與驗(yàn)證token的方法

    在node中使用jwt簽發(fā)與驗(yàn)證token的方法

    這篇文章主要介紹了在node中使用jwt簽發(fā)與驗(yàn)證token的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • node.js中的path.delimiter方法使用說明

    node.js中的path.delimiter方法使用說明

    這篇文章主要介紹了node.js中的path.delimiter方法使用說明,本文介紹了path.delimiter的方法說明、語法、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node.js實(shí)現(xiàn)的裝飾者模式示例

    node.js實(shí)現(xiàn)的裝飾者模式示例

    這篇文章主要介紹了node.js實(shí)現(xiàn)的裝飾者模式,簡單說明了裝飾者模式的原理、功能并結(jié)合實(shí)例形式給出了node.js裝飾者模式的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2017-09-09
  • 對(duì)node通過fs模塊判斷文件是否是文件夾的實(shí)例講解

    對(duì)node通過fs模塊判斷文件是否是文件夾的實(shí)例講解

    今天小編就為大家分享一篇對(duì)node通過fs模塊判斷文件是否是文件夾的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06

最新評(píng)論

炉霍县| 富民县| 龙海市| 康马县| 攀枝花市| 固原市| 江都市| 石台县| 婺源县| 高密市| 桦川县| 芮城县| 阿合奇县| 中西区| 沈阳市| 乐亭县| 克拉玛依市| 澳门| 桑日县| 临颍县| 怀远县| 屏东县| 龙山县| 阜新市| 水富县| 平湖市| 温泉县| 松滋市| 嵊泗县| 姚安县| 平南县| 广东省| 高尔夫| 恩平市| 北京市| 沂水县| 宁城县| 宁津县| 乡城县| 青河县| 山西省|