亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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訪(fǎng)問(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               // 存放路由文件,如果前后端分離的話(huà)只用來(lái)書(shū)寫(xiě)api接口使用
|   +-- index.js
|   +-- user.js
+-- views                 // 存放存放模板文件,就是前端頁(yè)面,如果后臺(tái)只是提供api的話(huà),這個(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訪(fǎng)問(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à),需要安裝很多包,很繁瑣,一不小心,就會(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)文章

  • Nodejs 模塊化實(shí)現(xiàn)示例深入探究

    Nodejs 模塊化實(shí)現(xiàn)示例深入探究

    這篇文章主要為大家介紹了Nodejs 模塊化實(shí)現(xiàn)示例深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Node.js fs模塊原理及常見(jiàn)用途

    Node.js fs模塊原理及常見(jiàn)用途

    這篇文章主要介紹了Node.js fs模塊原理及常見(jiàn)用途,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • node.js中的url.parse方法使用舉例

    node.js中的url.parse方法使用舉例

    url.parse()可以將一個(gè)完整的URL地址,分為很多部分,下面這篇文章主要給大家介紹了關(guān)于node.js中url.parse方法使用的相關(guān)資料,文中通過(guò)實(shí)例代碼和圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • express默認(rèn)日志組件morgan的方法

    express默認(rèn)日志組件morgan的方法

    morgan是express默認(rèn)的日志中間件,這篇文章主要介紹了express默認(rèn)日志組件morgan的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 詳解Node.js access_token的獲取、存儲(chǔ)及更新

    詳解Node.js access_token的獲取、存儲(chǔ)及更新

    本篇文章主要介紹了Node.js access_token的獲取、存儲(chǔ)及更新 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • node.js中的fs.link方法使用說(shuō)明

    node.js中的fs.link方法使用說(shuō)明

    這篇文章主要介紹了node.js中的fs.link方法使用說(shuō)明,本文介紹了fs.link的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node.js如何自定義實(shí)現(xiàn)一個(gè)EventEmitter

    node.js如何自定義實(shí)現(xiàn)一個(gè)EventEmitter

    我們了解到,Node采用了事件驅(qū)動(dòng)機(jī)制,而EventEmitter就是Node實(shí)現(xiàn)事件驅(qū)動(dòng)的基礎(chǔ),本文主要介紹了node.js自定義實(shí)現(xiàn)EventEmitter,感興趣的可以了解一下
    2021-07-07
  • nodejs前端自動(dòng)化構(gòu)建環(huán)境的搭建

    nodejs前端自動(dòng)化構(gòu)建環(huán)境的搭建

    本文這里給大家介紹的是nodejs中前端自動(dòng)化構(gòu)建環(huán)境的搭建方法,非常的細(xì)致全面,有需要的小伙伴可以參考下
    2017-07-07
  • node.js生成與讀取csv文件方法詳解

    node.js生成與讀取csv文件方法詳解

    這篇文章主要介紹了node.js生成與讀取csv文件方法詳解,需要的朋友可以參考下
    2022-10-10
  • nodejs學(xué)習(xí)筆記之路由

    nodejs學(xué)習(xí)筆記之路由

    因?yàn)橹皇怯糜诒镜胤?wù)器用于自己測(cè)試用,所以不需要太完善的路由功能,所以也就不去使用express框架,而是自己實(shí)現(xiàn)一個(gè)簡(jiǎn)易路由,可以針對(duì)自己的需求來(lái)定制路由功能。
    2017-03-03

最新評(píng)論