日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

koa --- [MVC实现之一]自定义路由读取规则

發布時間:2023/12/10 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 koa --- [MVC实现之一]自定义路由读取规则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實現MVC分層架構

  • 目標是創建約定大于配置、開發效率高、可維護性強的項目架構
  • 路由處理
    • 規范
      • 所有路由,都要放在routes文件夾中
      • 若導出路由對象,使用 動詞+空格+路徑 作為key, 值是操作方法
      • 若導出函數, 則函數返回第二條約定格式的對象
    • 路由定義:
      • 新建 router/index.js, 默認index.js沒有前綴
      module.exports = {'get /':async ctx => {ctx.body = '首頁'},'get /detail': ctx => {ctx.body = '詳情頁面'} }
      • 新建 router/user.js路由前綴是/user
      module.exports = { 'get /': async ctx => {ctx.body = '用戶首頁' }, 'get /detail': async ctx => {ctx.body = '用戶詳情頁面' }

}
````

新建目錄結構如下

/mar/mar-load.js

  • load函數,根據傳入的參數(‘routes’),讀取目錄及其內容,將得到參數該回調函數
  • 說明:
  • __dirname: 保存的是當前文件夾的路徑
  • fs.readdirSync: 同步獲取當前文件夾下的文件
  • require(filename): 獲取文件夾中的內容
  • const path = require('path'); const fs= require('fs'); const load = async (dir, cb) =>{// 獲取dir的路徑const url = path.resolve(__dirname, dir);// 獲取dir文件夾下的文件內容const files = fs.readdirSync(url);// 遍歷文件files.forEach((filename) =>{// 去掉擴展模filename = filename.replace('.js', '');const routes= require(`${url}/${filename}`);cb(filename, routes);}) }
    • initRouter函數:
  • 使用koa-router將路由和路由處理函數關聯起來
  • 根據load函數傳來的函數名,添加路由前綴
  • const Router = require('koa-router'); const initRouter = () =>{const router = new Router();load("routes", (filename, routes) =>{const prefix = filename === 'index' ? '' : '${filename}';Object.keys(routes).forEach( key =>{const [ method, path ] = key.split(' ');// 注冊路由router[method](prefix + '/' + path, routes[key]);})})return router }
    • 總體代碼如下
    • /mar/mar-load.js
    const fs = require('fs'); const path = require('path'); const Router = require('koa-router');// 讀取目錄和路徑 const load = async (dir, cb) => {// 獲取絕對路徑const url = path.resolve(__dirname, dir);// 讀取目錄const files = fs.readdirSync(url);files.forEach((filename) => {// 去掉擴展名filename = filename.replace('.js', '');const routes = require(url + '/' + filename);cb(filename, routes);})}// 加載路由 // app.get('/', ctx => {}) const initRouter = () => {const router = new Router();load('routes', (filename, routes) => {const prefix = filename === 'index' ? '' : `/${filename}`;Object.keys(routes).forEach(key => {const [method, path] = key.split(' ');console.log(`正在映射地址: ${method.toLocaleUpperCase()}${prefix}${path}`);// 注冊路由router[method](prefix + path, routes[key]);})})return router; } module.exports = { initRouter }

    初始化文件

    • /mar/index.js: 為初始文件,負責工作如下:
  • 加載mar-load.js,并執行.
  • 創建一個http服務器監聽3000端口
  • const koa = require('koa'); const app = new koa(); const { initRouter } = require('./mar-load'); app.use(initRouter().routes()); app.listen(3000);

    啟動

    node index.js

    總結

    以上是生活随笔為你收集整理的koa --- [MVC实现之一]自定义路由读取规则的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。