koa
-
代码编写上避免了多层的嵌套异步函数调用 async await来解决异步
-
async await 需要依赖于promise
-
-
更轻... 减少了内置的中间件 express.static处理静态资源的内置中间件 express.Router() 路由
-
启动步骤
-
引入Koa构造函数对象
const Koa = require('koa')
-
创建服务器示例对象
const app = new Koa();
-
配置中间件
app.use(做什么?)
-
监听端口启动服务器
app.listen(8888);
-
-
做什么? (函数参数说明)
-
context上下文对象: 该对象类似原生http中的 req + res
-
该对象的req,res属性也存在,就是原生没有包装过的req,res
-
简单说: context 对象就是从请求到响应 过程中的一个描述对象
-
-
next函数:调用下一个中间件
-
-
request(请求对象): 其中包含客户端请求的相关信息
-
response(响应对象): 包含响应数据的具体操作
request常用属性
ctx.request.url="xxx"
ctx.request.method="xxx"
ctx.request.headers ="xxx"
response常用属性
ctx.response.set(ctx.set)
ctx.response.status ='xxx'
ctx.response.body = 'xxx'
第三方中间件 用一个小登录案例来描述 koa-bodyparser koa-router koa-static koa-art-template koa_session
/**
* @author zsw
* @date 2019/7/25 20:05
* @version 1.0
*/
const Koa = require('koa');
//引入
const Router = require('koa-router');
const render = require('koa-art-template');
const static = require('koa-static');
const path = require('path');
const session = require ('koa-session');
const bodyParser = require('koa-bodyparser');
let app = new Koa();
render(app,{
root:path.join(__dirname,'./view'),
extname:'.html',
debug:process.env.NODE_ENV !== 'production'
});
let router = new Router();
app.keys = ['some secret hurr'];
const CONFIG = {
key: 'koa:sess',
maxAge: 86400000,
overwrite: true,
httpOnly: false, //不许在客户端操作session
signed: false,//保证数据不被串改
rolling: false,
renew: false,
};
app.use(session(CONFIG,app))
router.get('/',async (ctx) =>{
ctx.render('index');
});
router.post('/login',async (ctx)=>{
//获取用户名 和密码123
let username = ctx.request.body.username;
let password = ctx.request.body.password;
if(username != 'abc' || password != '123') {
// koa中的异常处理
ctx.set('content-type','text/html;charset=utf-8');
ctx.throw(200, `小钟马上就来修理^_^`);
// return;
} else {
// 使用session保存数据
ctx.session.user = {
username:'abc'
}
ctx.body = '登录成功';
}
}).get('/list',ctx=>{
ctx.body = `当前登录用户为:` + ctx.session.user.username
})
//静态资源
app.use(static(path.resolve('./public')));
app.use(bodyParser());
app.use(router.routes());
app.use(router.allowedMethods());
// 错误处理
app.on('error', async (err, ctx) => {
console.log(err);
});
app.listen(8080,()=>{
console.log('run');
})