1 未拆分路由时
const AdminModel=require('./models/admin')const Koa=require('koa')const app=new Koa();const Router=require('koa-router');const router=new Router();router.get('/api',async ctx=>{var data=await AdminModel.find({})ctx.body=data})app.use(router.routes())app.listen(8080)
拆分路由
在根目录下新建routers文件夹,在里面建index.js文件
根目录新建views文件夹,里面新建index.html
index.html
<body><h2>后台管理界面</h2></body>
//routers/index.js 使用路由,一个页面一个路由
const Router=require('koa-router');const router=new Router();const AdminModel=require('../models/admin')router.get('/api',async ctx=>{var data=await AdminModel.find({})ctx.body=data})router.get('/admin',async ctx=>{await ctx.render('index')})module.exports=router
index.js 配置路由
const Koa=require('koa')const app=new Koa();const router=require('./routers')const render = require("koa-art-template");const path=require('path')render(app, {root: path.join(__dirname, 'views'),extname: '.html', //后缀也可以写成.artdebug: process.env.NODE_ENV !== 'production'});app.use(router.routes())app.listen(8080)
将路由返回前端
index.html
<h2>后台管理界面</h2><table class="table table-hover"><thead><tr><th>编号</th><th>姓名</th><th>年龄</th><th>操作</th></tr></thead><tbody>{{each data}}<tr><td>{{$index}}</td><td>{{$value.name}}</td><td>{{$value.age}}</td><td><a href="#" class="btn btn-danger">删除</a><a href="#" class="btn btn-success">编辑</a></td></tr>{{/each}}</tbody></table>
//routers/index.js
router.get('/admin',async ctx=>{var data=await AdminModel.find();console.log(data)await ctx.render('index',{data})})
删除
index.html
<td><a href="/delete?id={{@ $value._id}}" class="btn btn-danger">删除</a><a href="#" class="btn btn-success">编辑</a></td>
//routers/index.js
router.get('/delete',async ctx=>{var {id}=ctx.query;await AdminModel.remove({_id:id})ctx.redirect('/admin') //返回到admin页面})
编辑
写一个edit.html,bs3-form写一个表单
<input type="text" class="form-control" id="user" value="{{data.name}}" placeholder="请输入用户名">
index.html
<a href="/edit" class="btn btn-success">编辑</a>
//routers/index.js
router.get('/edit',async ctx=>{var item=ctx.query.item //获取的是字符串var data=JSON.parse(item) //将字符串转换为对象await ctx.render('edit',{data})})
解析post提交的数据
安装
yarn add koa-bodyparser
导入
index.js
const bodyParser=require('koa-bodyparser')//routers/index.jsrouter.post('/doEdit',async ctx=>{ctx.body = ctx.request.body})
edit.html
name :方便后端去获取数据 /doEdit:跳转的页面 method:提交方式<form action="/doEdit" method="POST" role="form"><legend>编辑页面</legend><!-- name 方便后端去获取数据 --><div class="form-group"><label for="">用户名:name</label><input type="text" name="name" class="form-control" id="user" value="{{data.name}}" placeholder="请输入用户名"></div><div class="form-group"><label for="">年龄:age</label><input type="text" name="age" class="form-control" id="age" value="{{data.age}}" placeholder="请输入用户年龄"></div><button type="submit" class="btn btn-primary">确定</button></form>
修改
edit.html
<form action="/doEdit" method="POST" role="form"><legend>编辑页面</legend><input type="hidden" name="_id" value="{{data._id}}"><!-- name 方便后端去获取数据 --><div class="form-group"><label for="">用户名:name</label><input type="text" name="name" class="form-control" id="user" value="{{data.name}}" placeholder="请输入用户名"></div><div class="form-group"><label for="">年龄:age</label><input type="text" name="age" class="form-control" id="age" value="{{data.age}}" placeholder="请输入用户年龄"></div><button type="submit" class="btn btn-primary">确定</button></form>
传递的id
<input type="hidden" name="_id" value="{{data._id}}">
//routers/index.js
router.post('/doEdit',async ctx=>{var {_id,name,age}=ctx.request.bodyage=parseInt(age)await AdminModel.update({_id},{name,age})ctx.redirect('/admin')})
