koa2 框架
koa2 是什么koa2 是 nodejs web server 框架什么是框架 frame(类比 Vue)封装原生代码的 API规范流程和格式让开发人员更加关注于业务代码,提高开发效率框架 frame 和库 lib 的区别框架是唯一的,库就可以共存框架关注全流程,库关注单个功能类比 Vue 和 lodashkoa2 是 nodejs web server 框架通过 async/await 语法高
·
koa2 是什么
koa2 是 nodejs web server 框架
什么是框架 frame(类比 Vue)
- 封装原生代码的 API
- 规范流程和格式
- 让开发人员更加关注于业务代码,提高开发效率
框架 frame 和库 lib 的区别
- 框架是唯一的,库就可以共存
- 框架关注全流程,库关注单个功能
- 类比 Vue 和 lodash
koa2 是 nodejs web server 框架
- 通过 async/await 语法高效编写 web server
- 中间件机制,能合理拆分业务代码
koa2 安装和使用
- 安装 npm install koa2 --save
koa2 环境搭建
- 使用脚手架 koa-generator 创建 koa2 项目
npm install -g koa-generator
- 介绍项目的目录和文件
- 在项目中新建一个路由
koa2 生成项目
- koa2 <项目目录>
路由的建立
// 路由文件 commons.js
const router = require('koa-router')()
router.prefix('/api')
router.get('/list', ctx => {
ctx.body = 'this is list router'
})
module.exports = router
// app.js
// 1. 引入
const commons = require('./routers/commons')
// 2
app.use(commons.routes(), commons.allowedMethods())
如何接收和返回数据
- ctx 即 res 和 req 的集合
- querystring 的获取
// commons.js
router.get('/list', ctx => {
const query = ctx.query
console.log('query:', query)
ctx.body = 'this is list router'
})
- 获取 Request Body
router.post('/create', ctx => {
const body = ctx.request.body
console.log('body:', body)
ctx.body = 'this is create router'
})
- 返回 json 格式数据
router.get('/list', ctx = > {
ctx.body = {
errno: 0,
data: [
{ content: '留言1', name: '张三' },
{ content: '留言2', name: '李四' },
{ content: '留言3', name: '王五' }
]
}
})
路由上参数获取
router.get('/:id', async (ctx, next) => {
console.log(ctx.params.id)
})
koa 中间件
什么是中间件
- 一个流程上,独立的业务模块
- 可扩展,可插拔
- 类似于工厂的流水线
为什么使用中间件
- 拆分业务模块,使代码清晰
- 统一使用中间件,使得各业务代码都规范标准
- 扩展性好,易添加、易删除
模拟登陆中间件
// app.js
app.use(async (ctx, next) => {
const query = ctx.query
if (query.user === 'zhangsan') {
await next()
} else {
ctx.body = '请登录'
}
})
koa2 洋葱圈模型
- 中间件机制,是 koa2 的精髓
- 每个中间件都是 async 函数
- 中间件的运行机制,就像洋葱圈
koa2 中 cookie 的操作
const Koa = require('koa')
const app = new Koa()
app.use(async ctx => {
ctx.cookies.set('c', 300)
console.log(ctx.cookies.get('c'))
ctx.body = 'cookie test1'
})
app.listen(3000)
koa2 实现 session
- 使用 npm 插件 koa-generic-session
- 使用 ctx.session
配置
// app.js
const session = require('koa-generic-session')
app.keys = ['session-koa2'] // 密钥
// 自动配置了 cookie 和 session
app.use(session({
cookie: {
path: '/', // cookie 在根目录下有效
httpOnly: true, // cookie 只允许服务器端来操作
maxAge: 24 * 3600 * 1000 // cookie 过期时间
}
}))
使用
// routes/index.js
router.get('/session-test', async (ctx, next) => {
if (ctx.session.viewcount === null || ctx.session.viewcount === undefined) {
ctx.session.viewcount = 0
}
ctx.session.viewcount++
ctx.body = {
title: 'session-text',
viewcount: ctx.session.viewcount
}
})
单独某个路由使用中间件
// loginCheck 为中间件
router.get('/list', loginCheck, async (ctx, next) => {
...
})
配置跨域
const cors = require('koa2-cors')
app.use(cors({
origin: 'http://localhost:8080', // 前端 origin
credentials: true // 允许跨域带 cookie
}))
更多推荐
已为社区贡献1条内容
所有评论(0)