搭建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);
重启服务,浏览器访问测试

