koa 搭建模塊化路由/層級路由


搭建node項目目錄以及基本的文件

初始化package.json文件

執行下面命令生成package.json文件

npm init --yes

創建項目目錄

創建路由目錄routes,存放靜態資源目錄public,視圖目錄views

安裝項目所需的依賴

"dependencies": {
    "art-template": "^4.12.2",
    "koa": "^2.5.0",
    "koa-art-template": "^1.1.1",
    "koa-bodyparser": "^4.2.0",
    "koa-router": "^7.4.0",
    "koa-session": "^5.8.1",
    "koa-static": "^4.0.2",
    "mongodb": "^3.0.4"
  }

app.js文件初始化

const Koa = require('koa')
const router = require('koa-router')();

var app=new Koa();

//配置路由
router.get('/',(ctx)=>{
    ctx.body='這是一個首頁'
})

//啟動路由
app.use(router.routes()).use(router.allowedMethods());

app.listen(8008);

然后啟動node服務

 

 

 

 

 

配置路由

接下來我們定義兩個路由模塊admin.js(不啟動路由只是導出路由模塊)和api.js(在模塊中啟動路由(接口模塊))

var router = require('koa-router')();

router.get('/',(ctx)=>{
    ctx.body='后台管理系統首頁'
})

router.get('/user',(ctx)=>{
    ctx.body='用戶管理'
})

router.get('/focus',(ctx)=>{
    ctx.body='輪播圖管理'
})
router.get('/news',(ctx)=>{
    ctx.body='新聞管理'
})

module.exports=router;
var router=require('koa-router')();

router.get('/',(ctx)=>{
  ctx.body={"title":"這是一個api"};
})

router.get('/newslist',(ctx)=>{
  ctx.body={"title":"這是一個新聞接口"};
})

router.get('/focus',(ctx)=>{
  ctx.body={"title":"這是一個輪播圖的api"};
})

module.exports=router.routes();

然后在項目入口中即app.js引入兩個路由子模塊,api.js路由模塊中已經啟動了路由,引入后直接使用,admin.js路由模塊沒有啟動路由只是導出,引入后需要啟動路由

const Koa = require('koa')
const router = require('koa-router')();
//引入路由的子模塊
var admin = require('./routes/admin.js');
var api = require('./routes/api.js');

var app=new Koa();

//配置路由
router.get('/',(ctx)=>{
    ctx.body='這是一個首頁'
})

// 配置子路由  層級路由
router.use('/admin',admin.routes());
router.use('/api',api);   // 在模塊里面暴露路由並且啟動路由(啟動路由在子模塊中)

//啟動路由
app.use(router.routes()).use(router.allowedMethods());

app.listen(8008);

重啟服務進行測試,訪問根路由的時候是首頁

以上案例中模塊只分了一個層級,如果項目比較復雜有可能會分更多的層級,接下來我們把admin.js這個路由模塊在細分一個層級

首先在routes中在創建一個admin的路由,表示存放admin模塊中的子模塊,里面分別(newscate.js,user.js)

// 用戶的增加修改刪除

var router = require('koa-router')();

router.get('/',async (ctx)=>{
    ctx.body='新聞分類首頁';
})

router.get('/add',async (ctx)=>{
    ctx.body='增加新聞分類';
})

router.get('/edit',async (ctx)=>{
    ctx.body='編輯新聞分類';
})
router.get('/delete',async (ctx)=>{
    ctx.body='編輯新聞分類';
})

module.exports = router.routes();
// 用戶的增加修改刪除

var router=require('koa-router')();

router.get('/',async (ctx)=>{
    ctx.body='用戶首頁';
})

router.get('/add',async (ctx)=>{
    ctx.body='用戶添加';
})

router.get('/edit',async (ctx)=>{
    ctx.body='用戶編輯';
})

router.get('/delete',async (ctx)=>{
    ctx.body='刪除用戶';
})

module.exports = router.routes();

然后將這兩個子模塊在admin.js模塊中引入

var router = require('koa-router')();
var user = require('./admin/user.js');
var newscate = require('./admin/newscate.js');

//配置admin的子路由  層級路由
router.get('/',(ctx)=>{
    ctx.body='后台管理系統首頁'
})

router.use('/user',user);
router.use('/newscate',newscate);

module.exports = router.routes();

最后將admin在app.js中引入

const Koa = require('koa')
const router = require('koa-router')();
//引入路由的子模塊
var admin = require('./routes/admin.js');

var app=new Koa();

//配置路由
router.get('/',(ctx)=>{
    ctx.body='這是一個首頁'
})

// 配置子路由  層級路由
router.use('/admin',admin.routes());

//啟動路由
app.use(router.routes()).use(router.allowedMethods());

app.listen(8008);

重啟node服務,瀏覽器訪問測試結果

項目中有很多路由時只有一級的,比如/about去訪問關於我們的頁面,這種情況我們可以在routes中定義一個index.js的模塊

var router = require('koa-router')();

router.get('/',async (ctx)=>{
  ctx.body='這是一個首頁'
})
//注意 前台后后台匹配路由的寫法不一樣
router.get('/case',(ctx)=>{
  ctx.body='案例'
})

router.get('/about',async (ctx)=>{
  ctx.body='關於我們'
})

module.exports = router.routes();

然后再app.js中引入並使用

const Koa = require('koa')
const router = require('koa-router')();

//引入路由的子模塊index
var index = require('./routes/index.js');
var admin = require('./routes/admin.js');

var app=new Koa();

//配置路由
router.use(index);

// 配置子路由  層級路由
router.use('/admin',admin);

//啟動路由
app.use(router.routes()).use(router.allowedMethods());

app.listen(8008);

重啟服務,瀏覽器訪問測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM