Koa2学习
await相关await可以被视作是async+await的简写,也就是用来等待async的结果await只能在async声明的函数中使用async永远返回一个Promise对象
query和querystring的区别- 在
koa2中GET请求通过request接受,接受的方法有两种:query和querystringquery:返回的是格式化好的参数对象querystring: 返回的是请求字符串,需要对字符串进行进一步处理
- 在
- 在
koa2中获取post请求的步骤:
- 解析上下文
ctx中的原生nodex.js对象req(和request不一样) - 将POST表单数据解析成
querystring字符串,例如:user=chase&age=23 - 将字符串转换为
JSON格式
ctx.request和ctx.req的区别
ctx.request是koa2中context经过封装的请求对象,用起来更加直观和简单ctx.req是context提供的node.js中原生的http请求对象,用起来虽然不是很直观,但是可以获得更多的内容
中间件
- koa-bodyparser:
- 把
post请求直接转换到ctx.request.body里 - 可以直接帮忙把
querystring转换为键值对形式的JSON对象
- 把
const bodyparser = require('koa-bodyparser');
app.use(bodyparser());
let displayData = ctx.request.body; //bodyparser已经处理好了数据存放在body中
路由
fs.readFile(pageUrl, 'binary', (err, data)=>{})第二个参数表明以什么样的形式来读取数据- 可以手写路由,也可以直接调用koa-router中间件:
const Router = require('koa-router');
const router = new Router;
router.get('/',(ctx, next)=>{})
app.use(router.routes()).use(router.allowedMethods());
allowedMethods()方法表明该路由只支持GET请求,如果发送POST请求,则报错
- 在路由添加层级的方法:
- 在new出来的router对象中添加:
const router = new Router({prefix:'/chase'})
//prefix就是添加的层级的名字,添加后该router下的所有路由默认从/chase/开头
- 使用中间件koa-router来创建父子路由
- 先创建子级路由
let home = new Router();
home
.get('/chase',async(ctx)=>{
ctx.body = '子级路由home下的Chase页面'
})
.get('/todo', async(ctx)=>{
ctx.body = '子级路由home下的todo Page'
})
- 创建父级路由并把子级路由装载在父级路由上
const router = new Router();//该router是父级路由
router.use('/home', home.routes(), home.allowedMethods());//只支持GET请求
app
.use(router.routes())
.use(router.allowedMethods());
Cookie的使用
- 使用:
ctx.cookies.set('MyName', 'Chase');- 也可以为某个键值对设置一系列属性,包括过期时间、是否允许重写(overwrite)、httpOnly等
ctx.cookies.set(
'MyName', 'Chase', {
domain:'127.0.0.1',
path:'/index',
//这样设置表明只允许在index及以下的子路由中使用cookie
//如果不设置path则代表整个domain下的所有路由都可以使用cookie
maxAge: 1000*60*60*24, //默认毫秒为单位
expires: new Date('2022-3-25'), //绝对时间
httpOnly: false,
overwrite: false //不允许
}
)
//别的地方读取cookie
ctx.body = ctx.cookies.get('MyName'); //get(键名)
ejs模版引擎
- 使用:
npm install --save koa-views,npm install --save ejs - 应用:
- 首先引入该中间件以及node原生的path
const views = require('koa-views');
const path = require('path');
- 应用该中间件引入ejs渲染文件,然后将其渲染
app
.use(views(
path.join(__dirname, './view'), //view下存页面文件
{
extension:'ejs' //使用ejs文件
}
))
.use(async(ctx)=>{
let title = 'hello chase';
await ctx.render('index', {title})
//直接使用ctx的render API将index.ejs文件渲染到页面上
})
访问静态资源
- 静态资源包括:css、图片、js文件等
- 需要使用
koa-static中间件const static = require('koa-static'); - 添加静态资源的路径:
-
app.use(static(path.join(__dirname, staticPath))); -
之后就可以在url中直接加静态资源名称来访问静态资源
-