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', //后缀也可以写成.art
debug: 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.js
router.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.body
age=parseInt(age)
await AdminModel.update({_id},{name,age})
ctx.redirect('/admin')
})