• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
    當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

    Node.js使用Koa搭建 基礎(chǔ)項(xiàng)目

    來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:22:07
    文檔

    Node.js使用Koa搭建 基礎(chǔ)項(xiàng)目

    Node.js使用Koa搭建 基礎(chǔ)項(xiàng)目:Koa 是由 Express 原班人馬打造的超輕量服務(wù)端框架 與 Express 相比,除了自由度更高,可以自行引入中間件之外,更重要的是使用了 ES6 + async,從而避免了回調(diào)地獄 不過(guò)也是因?yàn)榇a升級(jí),所以 Koa2 需要 v7.60 以上的 node.js 環(huán)境 一、創(chuàng)建項(xiàng)
    推薦度:
    導(dǎo)讀Node.js使用Koa搭建 基礎(chǔ)項(xiàng)目:Koa 是由 Express 原班人馬打造的超輕量服務(wù)端框架 與 Express 相比,除了自由度更高,可以自行引入中間件之外,更重要的是使用了 ES6 + async,從而避免了回調(diào)地獄 不過(guò)也是因?yàn)榇a升級(jí),所以 Koa2 需要 v7.60 以上的 node.js 環(huán)境 一、創(chuàng)建項(xiàng)

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

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

    不過(guò)也是因?yàn)榇a升級(jí),所以 Koa2 需要 v7.60 以上的 node.js 環(huán)境

    一、創(chuàng)建項(xiàng)目

    手動(dòng)創(chuàng)建一個(gè)項(xiàng)目目錄,然后快速生成一個(gè) package.json 文件

    npm init -y
    
    安裝 koa    //當(dāng)前版本 2.4.1
    npm install koa -S
    
    然后創(chuàng)建一個(gè) 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 中添加啟動(dòng)指令

    一個(gè)最基礎(chǔ)的 koa 應(yīng)用就這樣完成了

    可以執(zhí)行 npm start 并在瀏覽器訪問(wèn) http://localhost:3000/ 查看效果

    如果覺(jué)得手動(dòng)創(chuàng)建項(xiàng)目太過(guò)繁瑣,可以使用腳手架 koa-generato 來(lái)生成項(xiàng)目

    npm install koa-generator -g
    
    koa2 project_name
    
    然后在項(xiàng)目下 npm install 安裝依賴,npm start 啟動(dòng)項(xiàng)目

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

    二、配置路由

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

    每一次 HTTP Request 都會(huì)創(chuàng)建一個(gè) Context 對(duì)象

    我們可以通過(guò) Context.request.path 來(lái)獲取用戶請(qǐng)求的路徑,然后通過(guò) Context.response.body 給用戶發(fā)送內(nèi)容

    Koa 默認(rèn)的返回類(lèi)型是 text/plain,如果要返回一個(gè) html 文件(或者一個(gè)模塊文件),就需要修改 Context.response.type

    另外,Context.response 可以簡(jiǎn)寫(xiě),比如 Context.response.type 簡(jiǎn)寫(xiě)為 Context.type,Context.response.body 簡(jiǎn)寫(xiě)為 Context.type

    在項(xiàng)目下創(chuàng)建一個(gè)存放 html 文件的目錄 views,并在該目錄下創(chuàng)建一個(gè) 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);
    
    然后在瀏覽器中訪問(wèn) http://localhost:3000/index 就能看到 index.html 頁(yè)面,而訪問(wèn)別的地址則是 not found

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

    npm install koa-router -S
    
    需要注意的是,在導(dǎo)入 koa-router 的時(shí)候,需要在末尾加一個(gè)括號(hào):
    const router = require('koa-router')();
    
    相當(dāng)于:
    const koaRouter = require('koa-router');
    const router = koaRouter();
    
    創(chuàng)建一個(gè) routes 目錄,用來(lái)存放路由文件,并在目錄下創(chuàng)建 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 方法,為文件中的所有接口添加一個(gè) 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 用于校驗(yàn)請(qǐng)求的方法,如果用 post 請(qǐng)求訪問(wèn) get 接口,就會(huì)直接返回失敗

    另外,還可以在 url 中添加變量,然后通過(guò) Context.params.name 訪問(wèn)

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

    三、靜態(tài)資源

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

    npm install koa-static -S
    
    創(chuàng)建一個(gè)目錄 public 用來(lái)存放靜態(tài)資源

     然后在 app.js 中添加以下代碼

    const static = require('koa-static');
    // 將 public 目錄設(shè)置為靜態(tài)資源目錄
    const main = static(__dirname + '/public');
    app.use(main);
    
    事實(shí)上,這三行代碼還可以優(yōu)化
    app.use(require('koa-static')(__dirname + '/public'));
    
    然后就能在 index.html 中引入對(duì)應(yīng)的文件了

     

    四、模板引擎

    上面的路由是使用 fs 模塊直接讀取 html 文件

    開(kāi)發(fā)的時(shí)候更推薦使用 koa-views 中間件來(lái)渲染頁(yè)面

    npm install koa-views -S
    
    在 app.js 中將 views 目錄設(shè)定為模版目錄
    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 字段來(lái)設(shè)定模版類(lèi)型
    app.use(views(__dirname + '/views', {
     extension: 'pug' // 以 pug 模版為例
    }))
    

    五、結(jié)語(yǔ)

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

    當(dāng) Express 流行的時(shí)候,其冗雜的依賴項(xiàng)被很多開(kāi)發(fā)者所詬病

    所以 Express 團(tuán)隊(duì)將  Express 拆卸得只剩下最基本的骨架,讓開(kāi)發(fā)者自行組裝,這就是 Koa

    正如文中所說(shuō),從零開(kāi)始太過(guò)繁瑣,可以使用腳手架 koa-generato 來(lái)快速開(kāi)發(fā)

    不過(guò)我更推薦,在熟悉了 Koa 之后,搭一個(gè)適合自己項(xiàng)目的腳手架

    不然為何不直接用 Express 呢

    我想這也是 Koa 的官方文檔中沒(méi)有提到 generato 工具的原因吧

    聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Node.js使用Koa搭建 基礎(chǔ)項(xiàng)目

    Node.js使用Koa搭建 基礎(chǔ)項(xiàng)目:Koa 是由 Express 原班人馬打造的超輕量服務(wù)端框架 與 Express 相比,除了自由度更高,可以自行引入中間件之外,更重要的是使用了 ES6 + async,從而避免了回調(diào)地獄 不過(guò)也是因?yàn)榇a升級(jí),所以 Koa2 需要 v7.60 以上的 node.js 環(huán)境 一、創(chuàng)建項(xiàng)
    推薦度:
    標(biāo)簽: js 項(xiàng)目 node.js
    • 熱門(mén)焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門(mén)推薦

    專題
    Top
    主站蜘蛛池模板: 久久精品国产亚洲av影院| 精品国产免费一区二区三区香蕉| 久久久久亚洲精品天堂| 99精品国产成人一区二区| 麻豆aⅴ精品无码一区二区| 久久精品成人欧美大片| 亚洲国产精品第一区二区| 97久久超碰国产精品旧版| 亚洲国产精品无码久久青草| 国产精品亚洲二区在线观看| 久久99精品久久久久久| 国产精品VA在线观看无码不卡| 亚洲精品国产精品乱码不卡√| 久久久久久久亚洲精品| 国产精品小黄鸭一区二区三区| 国产精品亚洲欧美一区麻豆| 国产精品免费网站| 国产精品美女网站| 欧美精品福利视频| WWW国产精品内射老师| 亚洲av无码国产精品夜色午夜| 日韩精品人妻av一区二区三区 | 国产精品秘入口福利姬网站| 久久国产免费观看精品3| 免费精品精品国产欧美在线欧美高清免费一级在线 | 亚洲精品私拍国产福利在线| 久久精品国产第一区二区三区| 亚洲精品和日本精品| 无夜精品久久久久久| 欧美成人精品高清视频在线观看| 国产精品美女久久久久av爽| 99久久国产综合精品成人影院| 久久久久国产精品| 久久线看观看精品香蕉国产| 精品国产一区二区三区久久| 国产精品嫩草视频永久网址| 精品免费tv久久久久久久| 青青草原综合久久大伊人精品| 欧美亚洲精品在线| 国产韩国精品一区二区三区| 国产精品熟女福利久久AV |