koa基本使用
1、npm安装
npm install koa
2、引入
var koa = require('koa')
3、实例化
var app = new koa()
4、中间件
app.use((ctx)=>{
ctx.body = 'hellow koa'
})
//相当于node创建server里面的res.end('hellow koa')
//相当于express里面app.get('/'(req,res)=>{
res.render('hellow koa')
})
5、监听端口号
app.listen(3000)
koa路由get传值
在koa2中get传值通过request接收,但是接收的方法有两种:query和querystring
query:返回的是格式化好的参数对象
querystring:返回的是请求字符串
//ctx读取get传值
router.get('/name?aid=124',(ctx)=>{
console.log(ctx.query) //获取的是对象
console.log(ctx.querystring)//获取的是一个字符串
console.log(ctx.url) //获取url地址
//ctx里面的request获取get传值
console.log(cxt.request)
console.log(ctx.request.url)
console.log(ctx.request.querystring)
})
动态路由
router.get('/news/:aid',async(ctx)=>{
console.log(ctx.params) //{aid:'url输入的内容'}
cxt.body = '新闻详情'
})
动态路由传多个值
router.get('/news/:aid1/:aid2',(ctx)=>{
console.log(ctx.params)
})
中间件
匹配路有前或者匹配路由完成所做的一系列操作,我们可以把他叫为中间件。
可分为应用中间件、路由中间件、错误处理中间件、第三方中间件
应用中间件
app.use('/',(ctx,next)=>{
console.log(new Date())
next();
})
第一个参数可以写也可以不写,不写的话就是匹配任何路由都会执行中间件,
next();执行,当前路由匹配完成之后继续向下匹配。
路由中间件
router.get('/news',(ctx,next)=>{
console.log(111);
})
router.get('news',(ctx)=>{
ctx.body='新闻页面'
})
如果这样写会显示not found
必须在第一个路由里面写next();
错误处理中间件
app.use(async (ctx,next)=>{
console.log('我是最先执行的');
next();
if(ctx.status==404){
console.log('我是最后执行的')
ctx.status = 404;
ctx.body = '这是一个404页面'
}else{
console.log('我是最后执行的')
}
})
router.get('/news',(ctx)=>{})
执行顺序,先执行app.user()next前的代码
执行next()
执行router.get()
执行app.user()next后的代码
(洋葱模型)
koa使用模板引擎
1、npm install koa-views
npm install ejs
2、引入
var views = require('koa-views')
var ejs = require('ejs')
3、使用
app.use(views(__dirname,{
map:{
html:'ejs'
}
}))注意模板必须是.html
或者
app.use(views(__dirname,{extension:'ejs'}))注意模板后缀名是.ejs
4、渲染
router.get('/',async (ctx)=>{
let title = '你好,ejs'
await ctx.render(‘index’,{
title:title//传数据给index模板
})//注意render前必须加await
})
模板的公共数据
app.use(async (ctx,next)=>{
ctx.state = {
}
await next()
})
koa post提交数据
//接收post表单提交的数据
router.get('/doadd',async(cxt)=>{
//获取数据
var data = await getPostData(cxt)
})
//原生node获取post数据
getPostData = function(ctx){
return new Promise(function(reslove,reject){
try{
let str = '';
ctx.req.on('data',function(chunk){
str+=trunk;
})
ctx.req.on('end',function(chunk){
resolve(str)
})
}catch(err){
reject(err)
}
})
}
//使用koa-bodyparser获取post数据
1、安装koa-bodyparser
npm install bodyparser
2、引入
var bodyparser = require('koa-bodyparser')
3、使用
app.use(bodyparser())
4、ctx.request.body获取
router.get('/doadd',async(cxt)=>{
//获取数据
var data = ctx.request.body
})
koa-static静态资源,静态web服务
1、安装
npm install koa-static
2、引入
var server = require('koa-static')
3、使用
app.user(server(__dirname+'static'))
可以配置多个
app.user(server(__dirname+'public'))
koa模板引擎art-template
特点:简约超快
http://aui.github.io/art-template,文档
1、安装
npm install art-template
npm install koa-art-template
两者都要安装。
2、引入
var render = require('koa-art-template')
3、配置
render(app,{
root:path.join(__dirname,'view')//模板引擎的位置
extname:'.art' //后缀名
debug:process.env.NODE_ENV !=='production' //是否开启调试模式
})
4、使用
await.cxt.render('index')
注意使用了path模块,别忘了引入path模块
5、绑定数据和ejs一样
cxt.render('index',{
data:data
})
koa cookie
cookie介绍
1、cookie保存在浏览器客户端
2、http是无状态协议,无法实现多页面数据共享,cookie可以让我们用同一个浏览器访问同一个域名的时候实现多页面之间的数据共享。
作用:
1、保存用户信息
2、浏览历史记录
3、猜你喜欢的功能
4、10天免登陆
5、多个页面数据传递。
koa cookie使用
ctx.cookies.set(name,value,[options])