Koa ----基于Node.js平台的下一代web开发框架(官网是这么说的)。
1. 架设HTTP服务
const Koa = require('koa');
let server = new Koa();
server.listen(8080);
像这样,一个最简单的HTTP服务就搭建成功了。
2. 静态资源的处理
静态资源的处理依赖中间件koa-static
来完成
const Koa = require('koa');
const static = require('koa-static');
let server = new Koa();
server.listen(8080);
server.use(static('www'));
输入127.0.0.1:8080/images/...
这样静态资源的处理就完成了,读取的是www下的资源.
3. 路由
原生路由ctx.request.path
的方式不方便,所以还是使用中间件,koa-router,koa-route,都可以实现路由,但有区别。
koa-router适合大型项目,但使用稍微复杂,koa-route适合做小东西,使用简单。
koa-router:
const Koa = require('koa');
const router = require('koa-router');
let server = new Koa();
let r1 = router();
r1.get('/',async(ctx,next)=>{
...
});
server.use(r1.routes);
server.listen(8080);
koa是强依赖router的,它没有像express那样的get,post,use方法。
ctx是上下文的意思,指的是一次HTTP请求和HTTP回复
。
如果想向外面响应东西,可以ctx.response.body=xxx
.对应的当然也有ctx.request
.
获取路由参数使用ctx.params
,获取get请求数据的参数使用ctx.request.query
。
const Koa = require('koa');
const router = require('koa-router');
const static = require('koa-static');
let server = new Koa();
server.listen(8080);
let r1 = router();
server.use(r1.routes());
//r1.get('/about/:user/:pass',async (ctx,next)=>{ // 路由参数
r1.get('/login',async (ctx,next)=>{
ctx.response.body = '<h1>这是个测试的东西</h1>';
console.log('start'); // -1
console.log(ctx.request.query); // 得到get数据 路由参数ctx.params
await next();
console.log('bbb'); // -3
});
r1.get('/',async (ctx,next)=>{
console.log('aaa'); // -2
});
//处理静态文件
server.use(static('www'));
koa-route:
...
const route = require('koa-route');
server.use(route.get('/',ctx=>{...}));
ctx.req/res :
原生req、res对象
ctx.request/response :
koa封装的req、res