主要实现了以下几个知识点:
1.koa中的路由如何引入
2.处理get请求,及获取参数
3.处理post请求,及获取参数
4.使用中间件koa-bodyparser(获取请求参数),koa-static(解析静态文件),
5.操作封装后的mongodb数据库,如何封装可以看我之前的文章:封装koa操作mongodb数据库方法
直接上代码,对应功能有注释
const koa = require("koa")
const router = require("koa-router")() // 路由
const render = require("koa-art-template") // 引入art-template
const bodyParser = require("koa-bodyparser") // 为了把请求的参数放在ctx.request.body
const static = require("koa-static") // 解析静态文件
const path = require('path');
const DB = require("./module/db")
const app = new koa()
app.use(bodyParser())
// 配置静态服务中间件 // 可配置多个
// app.use(static(__dirname + "/static"))
app.use(static(__dirname + "/ouDotPc"))
// app.use(static(__dirname + "/dist")) // 前端打包文件
// 3. 配置 koa-art-template模板引擎
render(app, {
root: path.join(__dirname, 'ouDotPc'), // 视图的位置
extname: '.html', // 后缀名 如:index.html
debug: process.env.NODE_ENV !== 'production' //是否开启调试模式
})
// koa中的路由 返回index.html页面
router.get("/", async (ctx) => {
//设置kookie
ctx.cookies.set("userinfo", "zhangsan", {
maxAge: 60 * 1000, // cookis过期时间60秒
// path: "/news", // 可以访问cokie的页面吧
// domain:".baidu.com", // 默认当前域名下可访问,可设置哪些域名可访问kookie
// httpOnly:false, // 是否只有服务器可访问kookie
})
const data = await DB.find("order_item", {}) //数据库中查询表“order_item”
await ctx.render('index', { // 4. 传参 渲染koa-art-template模板 index.html
list: data
})
})
// koa中的路由 返回add.html页面
router.get("/add", async (ctx) => {
await ctx.render('add')
})
// koa中的路由 返回doAdd.html页面
router.post("/doAdd", async (ctx) => {
const data = ctx.request.body
const result = await DB.insert("order_item", data)
try{
if (result.acknowledged) {
ctx.redirect("/")
}
}catch(err){
console.log(err);
return
}
})
// koa中的路由 返回edit.html页面
router.get("/edit", async (ctx) => {
const id = ctx.query.id // 获取参数
const data = await DB.find("order_item", {"_id":DB.getObjectId(id)}) // 数据库中查询对应id的数据
await ctx.render('edit', { // 4. 传参 渲染koa-art-template模板 edit.html
userBbj: data[0]
})
})
//POST接口 koa中的路由 返回doEdit.html页面
router.post("/doEdit", async (ctx) => {
const filterJson = ctx.request.body // 获取post参数
const result = await DB.update("order_item", {
"_id": DB.getObjectId(filterJson.id)
}, filterJson)
if (result.acknowledged) {
ctx.redirect("/")
} else {
ctx.body = result
}
})
// koa中的路由 删除操作
router.get("/delete", async (ctx) => {
const id = ctx.query.id
const result = await DB.remove("order_item", {"_id":DB.getObjectId(id)})
if (result.acknowledged) {
ctx.redirect("/")
}else{
ctx.body = result
}
})
app.use(router.routes())
app.use(router.allowedMethods());
app.listen(3000)