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

Koa2路由及koa腳手架使用入門(mén)詳解

 更新時(shí)間:2023年05月24日 11:03:42   作者:前端老兵  
這篇文章主要為大家介紹了Koa2路由及koa腳手架的使用入門(mén)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

路由是什么

路由(routing)是指分組從源到目的地時(shí),決定端到端路徑的網(wǎng)絡(luò)范圍的進(jìn)程。

路由是 根據(jù)不同的 url 地址 展示 不同的內(nèi)容或頁(yè)面。

比如你請(qǐng)求了某個(gè)網(wǎng)站的用戶(hù)列表的URL他就會(huì)去執(zhí)行查詢(xún)用戶(hù)列表,并返回用戶(hù)列表數(shù)據(jù)。

如果你請(qǐng)求了特定用戶(hù)的接口的URL,他就會(huì)查詢(xún)特定用戶(hù),并返回給你特定用戶(hù)的數(shù)據(jù)。

路由決定了不同URL是如何被不同地執(zhí)行的

在Koa中,路由的本質(zhì)是中間件

為什么要用路由?

  • 如果沒(méi)有路由,會(huì)怎么樣?
  • 路由存在的意義是什么?

如果沒(méi)有路由

  • 所有請(qǐng)求都做了相同的事
  • 所有請(qǐng)求都會(huì)返回相同的結(jié)果

路由存在的意義

  • 處理不同的URL
  • 處理不同的HTTP方法
  • 解析URL上的參數(shù)

koa中使用路由

自定義項(xiàng)目中使用koa路由

安裝

npm install koa-router

新建服務(wù)器

const koa = require('koa');// 引入koa
const Router = require('koa-router');
//配置路由 ,ctx 上下文context ,包含了request和response等信息
var router =  new Router();
router.get('/',async (ctx)=>{
    ctx.body = '首頁(yè)'; //相當(dāng)于 res.writeHead(); res.end();
}).get('/news',async (ctx)=>{
    ctx.body = '這是一個(gè)新聞頁(yè)面';
});
const app = new koa();//實(shí)例化koa
app.use(router.routes()); //啟動(dòng)路由
app.use(router.allowedMethods());//官方配置

獲取get傳值

const koa = require('koa');
var router = require('koa-router')();
var app = new koa();
router.get('/',async (ctx)=>{
    ctx.body = '首頁(yè)';
});
router.get('/news',async (ctx)=>{
    ctx.body = '新聞列表頁(yè)面';
});
//獲取get傳值
router.get('/newscontent',async(ctx)=>{
    //從ctx中讀取get值
    console.log(ctx.query); //獲取的是格式化的對(duì)象,例{id:'123'}
    console.log(ctx.querystring); //獲取的是url的字符串 ,例:'id=123'
    console.log(ctx.request); //獲取請(qǐng)求相關(guān)的信息,包括method,url,header等信息
    ctx.body = '新聞詳情';
});
//動(dòng)態(tài)路由 
router.get('/news/:params',async(ctx)=>{
    //aid 為自定義參數(shù)名,可以通過(guò)ctx.params訪問(wèn)
    //如果有多個(gè)動(dòng)態(tài)傳值,則可以寫(xiě)成 '/news/:params1/:params2'的形式
    ctx.body = ctx.params;
});
app.use(router.routes()); //啟動(dòng)路由
app.use(router.allowedMethods()); //官方配置,請(qǐng)求錯(cuò)誤的時(shí)候返回一個(gè)狀態(tài)
app.listen(3000);

使用 koa 腳手架(koa-generator)創(chuàng)建項(xiàng)目中使用koa路由

如果您使用 koa 腳手架(koa-generator)已經(jīng)創(chuàng)建好了項(xiàng)目你,那么使用路由會(huì)非常簡(jiǎn)單。

如果不清楚如何使用koa腳手架,請(qǐng)參考:

淺談Koa

koa2項(xiàng)目目錄詳解:

.
+-- bin
|   +-- www               // 項(xiàng)目啟動(dòng)必備文件,配置端口等服務(wù)信息
+-- node_modules          // 項(xiàng)目依賴(lài),安裝的所有模塊都會(huì)在這個(gè)文件夾下
+-- public                // 存放靜態(tài)文件,如樣式、圖片等
|   +-- images            // 圖片
|   +-- javascript        // js文件
|   +-- stylesheets       // 樣式文件
+-- routers               // 存放路由文件,如果前后端分離的話只用來(lái)書(shū)寫(xiě)api接口使用
|   +-- index.js
|   +-- user.js
+-- views                 // 存放存放模板文件,就是前端頁(yè)面,如果后臺(tái)只是提供api的話,這個(gè)就是備用
|   +-- error.pug
|   +-- index.pug
|   +-- layout.pug
+-- app.js                // 主入口文件
+-- package.json          // 存儲(chǔ)項(xiàng)目名、描述、作者、依賴(lài)等等信息
+-- package-lock.json     // 存儲(chǔ)項(xiàng)目依賴(lài)的版本信息,確保項(xiàng)目?jī)?nèi)的每個(gè)人安裝的版本一致

打開(kāi) routes\index.js,j即可查看創(chuàng)建好的路由文件。

var router = require('koa-router')(); // 引入路由插件
// 定義路由內(nèi)容 我們只需要操作這里即可
router.get('/', function *(next) {
  yield this.render('index', {
    title: 'Hello World Koa!'
  });
});
router.get('/foo', function *(next) {
  yield this.render('index', {
    title: 'Hello World foo!'
  });
});
router.post('/post1', function *(next) {
  yield this.render('index', {
    title: 'Hello World foo!'
  });
});
//獲取get傳值
router.get('/newscontent',async(ctx)=>{
    //從ctx中讀取get值
    console.log(ctx.query); //獲取的是格式化的對(duì)象,例{id:'123'}
    console.log(ctx.querystring); //獲取的是url的字符串 ,例:'id=123'
    console.log(ctx.request); //獲取請(qǐng)求相關(guān)的信息,包括method,url,header等信息
    ctx.body = '新聞詳情';
});
//動(dòng)態(tài)路由 
router.get('/news/:params',async(ctx)=>{
    //aid 為自定義參數(shù)名,可以通過(guò)ctx.params訪問(wèn)
    //如果有多個(gè)動(dòng)態(tài)傳值,則可以寫(xiě)成 '/news/:params1/:params2'的形式
    ctx.body = ctx.params;
});
module.exports = router; // 導(dǎo)出路由

app.js中路由展示

注意:這里,只展示有關(guān)路由代碼,還有其他代碼,省略了不少:

var app = require('koa')();
...
var index = require('./routes/index'); 
var users = require('./routes/users'); // 自定義的路由模塊 : 用戶(hù)模塊 users
...
// routes definition
app.use(index.routes(), index.allowedMethods());  //啟動(dòng)路由 
app.use(users.routes(), users.allowedMethods());  //官方配置,請(qǐng)求錯(cuò)誤的時(shí)候返回一個(gè)狀態(tài)
...
module.exports = app;

users.js

var router = require('koa-router')(); // 引入路由插件
router.prefix('/users'); // 定義路由前綴
// 定義路由內(nèi)容 我們只需要操作這里即可
router.get('/', function *(next) {
  this.body = 'this is a users response!';
});
router.get('/bar', function *(next) {
  this.body = 'this is a users/bar response!';
});
module.exports = router; // 導(dǎo)出路由

總結(jié)

路由處理不同的URL

我們要做什么事情,根據(jù)路由來(lái)決定。我們通過(guò)路由就找到了這個(gè)地方,去做相應(yīng)的業(yè)務(wù)邏輯的處理好。

就是處理不同的HTTP方法

因?yàn)槲覀冊(cè)谡?qǐng)求一個(gè)地方的時(shí)候,可能你這個(gè)請(qǐng)求方式會(huì)有很多種,比如get請(qǐng)求、post 請(qǐng)求。每一種請(qǐng)求的方法,它的所代表的意義又不一樣。所以我們?yōu)榱藚^(qū)分不同的請(qǐng)求方法,我們也得去使用路由。

為了解析URL上面的參數(shù)

我們?cè)谌プ銮昂蠖朔蛛x開(kāi)發(fā),需要通過(guò)http請(qǐng)求,并且請(qǐng)求一個(gè)地址,把我們要請(qǐng)求的參數(shù)傳給服務(wù)器端。

服務(wù)器端根據(jù)我們傳的參數(shù)來(lái)決定返回什么樣的結(jié)果。

以上三點(diǎn)就說(shuō)明了路由存在的意義,所以我們?cè)陧?xiàng)目開(kāi)發(fā)的過(guò)程中,一定要去區(qū)分好路由,以及對(duì)路由要有一個(gè)合理的規(guī)劃。

推薦使用 koa 腳手架(koa-generator)創(chuàng)建項(xiàng)目。,自己創(chuàng)建項(xiàng)目的話,需要安裝很多包,很繁瑣,一不小心,就會(huì)出問(wèn)題。

參考文檔 https://koa.bootcss.com/index.html

以上就是Koa2路由及koa腳手架使用入門(mén)詳解的詳細(xì)內(nèi)容,更多關(guān)于Koa2路由koa腳手架的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 在Node.js中使用HTTP上傳文件的方法

    在Node.js中使用HTTP上傳文件的方法

    這篇文章主要介紹了在Node.js中使用HTTP上傳文件的方法,作者以windows下的visual studio作為操作node的環(huán)境,推薦閱讀!需要的朋友可以參考下
    2015-06-06
  • NodeJS 將文件夾按照存放路徑變成一個(gè)對(duì)應(yīng)的JSON的方法

    NodeJS 將文件夾按照存放路徑變成一個(gè)對(duì)應(yīng)的JSON的方法

    這篇文章主要介紹了NodeJS 將文件夾按照存放路徑變成一個(gè)對(duì)應(yīng)的JSON的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Node.js的文件權(quán)限及讀寫(xiě)flag詳解

    Node.js的文件權(quán)限及讀寫(xiě)flag詳解

    Node.js對(duì)文件的讀寫(xiě)還是相當(dāng)靈活的,因?yàn)樽约豪鲜怯洸蛔∥募蚰夸洐?quán)限的數(shù)值表達(dá)和字符表達(dá)。所以整理出這篇文章,方便以后查閱,下面來(lái)一起看看吧。
    2016-10-10
  • 解決node-sass下載不成功的問(wèn)題

    解決node-sass下載不成功的問(wèn)題

    這篇文章主要介紹了解決node-sass下載不成功的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 詳解如何在Node.js中實(shí)現(xiàn)HTTP/2推送信息

    詳解如何在Node.js中實(shí)現(xiàn)HTTP/2推送信息

    HTTP/2 是一種現(xiàn)代化的網(wǎng)絡(luò)協(xié)議,它引入了多路復(fù)用、頭部壓縮和服務(wù)器推送等特性,其中,服務(wù)器推送允許服務(wù)器在客戶(hù)端請(qǐng)求資源時(shí),主動(dòng)推送額外的資源,提升頁(yè)面加載速度,下面將介紹如何在 Node.js 中實(shí)現(xiàn) HTTP/2 推送信息,需要的朋友可以參考下
    2024-12-12
  • NodeJS Web應(yīng)用監(jiān)聽(tīng)sock文件實(shí)例

    NodeJS Web應(yīng)用監(jiān)聽(tīng)sock文件實(shí)例

    這篇文章主要介紹了NodeJS Web應(yīng)用監(jiān)聽(tīng)sock文件實(shí)例,本文講解 NodeJS 的 TCP 和 HTTP 監(jiān)聽(tīng) Domain Socket 文件例子,需要的朋友可以參考下
    2015-02-02
  • 使用webpack打包koa2 框架app

    使用webpack打包koa2 框架app

    本文給大家介紹的是使用webpack為koa2框架打包的步驟及最終的部署,非常實(shí)用,有需要的小伙伴可以參考下
    2018-02-02
  • Puppet的一些技巧

    Puppet的一些技巧

    puppet這個(gè)工具真的很神奇,先不說(shuō)商業(yè)版有哪些黑科技,單是開(kāi)源版本就有很多可能讓你摸不著頭腦的地方,下面來(lái)列舉一下puppet是怎么查找puppet server的
    2018-09-09
  • node.js平臺(tái)下的mysql數(shù)據(jù)庫(kù)配置及連接

    node.js平臺(tái)下的mysql數(shù)據(jù)庫(kù)配置及連接

    本文主要介紹了node.js平臺(tái)下的mysql數(shù)據(jù)庫(kù)配置及連接的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03
  • 前端+nodejs+mysql實(shí)現(xiàn)前后端聯(lián)通的完整代碼

    前端+nodejs+mysql實(shí)現(xiàn)前后端聯(lián)通的完整代碼

    Node.js主要屬于后端技術(shù),但也可以用于前端開(kāi)發(fā)的某些場(chǎng)景,下面這篇文章主要介紹了前端+nodejs+mysql實(shí)現(xiàn)前后端聯(lián)通的完整代碼,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04

最新評(píng)論

新余市| 桐乡市| 灵台县| 仲巴县| 灵宝市| 竹北市| 贺州市| 图木舒克市| 邓州市| 元谋县| 六盘水市| 将乐县| 栖霞市| 仁化县| 平远县| 隆林| 菏泽市| 仪征市| 嘉鱼县| 邹平县| 逊克县| 金门县| 福州市| 巢湖市| 南昌县| 云霄县| 北宁市| 乌拉特前旗| 如皋市| 宁晋县| 莱西市| 阳城县| 崇文区| 平南县| 盖州市| 南宁市| 伊金霍洛旗| 渭南市| 凤台县| 正宁县| 汕头市|