搭建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);
重啟服務,瀏覽器訪問測試