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

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

 更新時(shí)間:2018年01月08日 08:58:20   作者:WiseWrong  
時(shí)下前端工程師有很多人比較關(guān)注NodeJs以及express 框架或者Koa 框架之類(lèi)的新技術(shù)。難得我最近閑時(shí)較多,利用一下舊歷新年尚未正式到來(lái)的這片閑暇,也來(lái)涉足其中,一窺其中奧妙。

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 并在瀏覽器訪(fǎng)問(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 安裝依賴(lài),npm start 啟動(dòng)項(xiàng)目

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

二、配置路由

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

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

我們可以通過(guò) Context.request.path 來(lái)獲取用戶(hù)請(qǐng)求的路徑,然后通過(guò) Context.response.body 給用戶(hù)發(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);
然后在瀏覽器中訪(fǎng)問(wèn) http://localhost:3000/index 就能看到 index.html 頁(yè)面,而訪(fǎng)問(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)求訪(fǎng)問(wèn) get 接口,就會(huì)直接返回失敗

另外,還可以在 url 中添加變量,然后通過(guò) Context.params.name 訪(fǎng)問(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í)上,這三行代碼還可以?xún)?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í)候,其冗雜的依賴(lài)項(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 工具的原因吧

相關(guān)文章

  • Koa2 之文件上傳下載的示例代碼

    Koa2 之文件上傳下載的示例代碼

    本篇文章主要介紹了Koa2 之文件上傳下載的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Node.js的包詳細(xì)介紹

    Node.js的包詳細(xì)介紹

    這篇文章主要介紹了Node.js的包詳細(xì)介紹,Node.js的包是一個(gè)目錄,其中包含JSON格式的包說(shuō)明文件package.json,Node.js的包基本遵循CommonJS規(guī)范,需要的朋友可以參考下
    2015-01-01
  • express項(xiàng)目文件目錄說(shuō)明以及功能描述詳解

    express項(xiàng)目文件目錄說(shuō)明以及功能描述詳解

    這篇文章主要給大家介紹了關(guān)于express項(xiàng)目文件目錄說(shuō)明以及功能描述的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • node版本切換與版本升級(jí)降級(jí)教程(win)

    node版本切換與版本升級(jí)降級(jí)教程(win)

    nvm是一個(gè)node的版本管理工具,可以簡(jiǎn)單操作node版本的切換、安裝、查看,下面這篇文章主要給大家介紹了關(guān)于node版本切換與版本升級(jí)降級(jí)教程的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • node.js基礎(chǔ)知識(shí)小結(jié)

    node.js基礎(chǔ)知識(shí)小結(jié)

    本文給大家匯總介紹了學(xué)習(xí)node.js的一些關(guān)于開(kāi)發(fā)環(huán)境的基礎(chǔ)知識(shí),非常簡(jiǎn)單,給新手們參考下
    2018-02-02
  • Nodejs中crypto模塊的安全知識(shí)講解

    Nodejs中crypto模塊的安全知識(shí)講解

    本篇文章給大家詳細(xì)介紹了Nodejs中crypto模塊的安全知識(shí)的相關(guān)內(nèi)容,需要的朋友跟著小編一下學(xué)習(xí)參考下吧。
    2018-01-01
  • node.js報(bào)錯(cuò):Cannot find module ''ejs''的解決辦法

    node.js報(bào)錯(cuò):Cannot find module ''ejs''的解決辦法

    最近發(fā)現(xiàn)了node.js居然報(bào)錯(cuò)了,錯(cuò)誤提示為:Cannot find module 'ejs',后來(lái)找了找資料發(fā)現(xiàn)解決的方法其實(shí)很簡(jiǎn)單,下面通過(guò)這篇文章來(lái)一起看看吧,希望對(duì)同樣遇到這個(gè)問(wèn)題的朋友們能有所幫助。
    2016-12-12
  • 詳解如何使用PM2將Node.js的集群變得更加容易

    詳解如何使用PM2將Node.js的集群變得更加容易

    本篇文章主要介紹了詳解如何使用PM2將Node.js的集群變得更加容易,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • nodejs修復(fù)ipa處理過(guò)的png圖片

    nodejs修復(fù)ipa處理過(guò)的png圖片

    ipa本身是一個(gè)zip文件改后綴后解壓縮就能看到應(yīng)用內(nèi)使用的資源文件,其中png圖片資源xcode打包的時(shí)候做了些手腳下面我們來(lái)看看如何修復(fù)這些問(wèn)題
    2016-02-02
  • node npm yarn報(bào)錯(cuò)error:不是內(nèi)部或外部命令

    node npm yarn報(bào)錯(cuò)error:不是內(nèi)部或外部命令

    文章介紹了如何安裝和配置Node.js、npm和yarn,并解決無(wú)法正常使用的問(wèn)題,主要步驟包括:正確安裝環(huán)境變量、配置用戶(hù)變量和系統(tǒng)變量、設(shè)置全局安裝模塊和緩存目錄的環(huán)境變量,以及手動(dòng)配置yarn的環(huán)境變量
    2024-11-11

最新評(píng)論

始兴县| 辽阳县| 西宁市| 库伦旗| 黄大仙区| 盐津县| 微山县| 泗洪县| 托克逊县| 黔西| 峨山| 赤城县| 邓州市| 镇原县| 黄山市| 承德市| 洮南市| 凤庆县| 红河县| 奇台县| 太仓市| 凌源市| 湖北省| 丹巴县| 库伦旗| 任丘市| 三江| 鹿邑县| 靖江市| 商丘市| 四会市| 芜湖市| 潮州市| 易门县| 玉环县| 霍邱县| 资阳市| 济宁市| 衡南县| 灵丘县| 南郑县|