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

Koa2路由及koa腳手架使用入門詳解

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

路由是什么

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

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

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

如果你請求了特定用戶的接口的URL,他就會查詢特定用戶,并返回給你特定用戶的數(shù)據(jù)。

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

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

為什么要用路由?

  • 如果沒有路由,會怎么樣?
  • 路由存在的意義是什么?

如果沒有路由

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

路由存在的意義

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

koa中使用路由

自定義項目中使用koa路由

安裝

npm install koa-router

新建服務器

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

獲取get傳值

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

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

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

如果不清楚如何使用koa腳手架,請參考:

淺談Koa

koa2項目目錄詳解:

.
+-- bin
|   +-- www               // 項目啟動必備文件,配置端口等服務信息
+-- node_modules          // 項目依賴,安裝的所有模塊都會在這個文件夾下
+-- public                // 存放靜態(tài)文件,如樣式、圖片等
|   +-- images            // 圖片
|   +-- javascript        // js文件
|   +-- stylesheets       // 樣式文件
+-- routers               // 存放路由文件,如果前后端分離的話只用來書寫api接口使用
|   +-- index.js
|   +-- user.js
+-- views                 // 存放存放模板文件,就是前端頁面,如果后臺只是提供api的話,這個就是備用
|   +-- error.pug
|   +-- index.pug
|   +-- layout.pug
+-- app.js                // 主入口文件
+-- package.json          // 存儲項目名、描述、作者、依賴等等信息
+-- package-lock.json     // 存儲項目依賴的版本信息,確保項目內(nè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); //獲取的是格式化的對象,例{id:'123'}
    console.log(ctx.querystring); //獲取的是url的字符串 ,例:'id=123'
    console.log(ctx.request); //獲取請求相關(guān)的信息,包括method,url,header等信息
    ctx.body = '新聞詳情';
});
//動態(tài)路由 
router.get('/news/:params',async(ctx)=>{
    //aid 為自定義參數(shù)名,可以通過ctx.params訪問
    //如果有多個動態(tài)傳值,則可以寫成 '/news/:params1/:params2'的形式
    ctx.body = ctx.params;
});
module.exports = router; // 導出路由

app.js中路由展示

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

var app = require('koa')();
...
var index = require('./routes/index'); 
var users = require('./routes/users'); // 自定義的路由模塊 : 用戶模塊 users
...
// routes definition
app.use(index.routes(), index.allowedMethods());  //啟動路由 
app.use(users.routes(), users.allowedMethods());  //官方配置,請求錯誤的時候返回一個狀態(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; // 導出路由

總結(jié)

路由處理不同的URL

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

就是處理不同的HTTP方法

因為我們在請求一個地方的時候,可能你這個請求方式會有很多種,比如get請求、post 請求。每一種請求的方法,它的所代表的意義又不一樣。所以我們?yōu)榱藚^(qū)分不同的請求方法,我們也得去使用路由。

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

我們在去做前后端分離開發(fā),需要通過http請求,并且請求一個地址,把我們要請求的參數(shù)傳給服務器端。

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

以上三點就說明了路由存在的意義,所以我們在項目開發(fā)的過程中,一定要去區(qū)分好路由,以及對路由要有一個合理的規(guī)劃。

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

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

以上就是Koa2路由及koa腳手架使用入門詳解的詳細內(nèi)容,更多關(guān)于Koa2路由koa腳手架的資料請關(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 將文件夾按照存放路徑變成一個對應的JSON的方法

    NodeJS 將文件夾按照存放路徑變成一個對應的JSON的方法

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

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

    Node.js對文件的讀寫還是相當靈活的,因為自己老是記不住文件或目錄權(quán)限的數(shù)值表達和字符表達。所以整理出這篇文章,方便以后查閱,下面來一起看看吧。
    2016-10-10
  • 解決node-sass下載不成功的問題

    解決node-sass下載不成功的問題

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

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

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

    NodeJS Web應用監(jiān)聽sock文件實例

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

    使用webpack打包koa2 框架app

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

    Puppet的一些技巧

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

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

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

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

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

最新評論

乌鲁木齐县| 莎车县| 锡林浩特市| 昂仁县| 仪陇县| 冀州市| 平山县| 进贤县| 珲春市| 乡宁县| 甘肃省| 万盛区| 玉溪市| 桂平市| 桓台县| 玉屏| 博乐市| 都江堰市| 长葛市| 焦作市| 林州市| 伊春市| 澳门| 集安市| 改则县| 合肥市| 镇巴县| 繁峙县| 崇义县| 西丰县| 福安市| 蒲江县| 深州市| 卢湾区| 五家渠市| 华蓥市| 卢龙县| 宜昌市| 陇南市| 宝坻区| 稷山县|