生活随笔
收集整理的這篇文章主要介紹了
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
) =>{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
);})
}
使用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
}
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
);})}
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实现之一]自定义路由读取规则的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。