87,921
社区成员
发帖
与我相关
我的任务
分享
npm install koa --save
const koa = require('koa');
const app = new koa();
app.use(async(ctx,next)=>{
ctx.body='1';
next();
ctx.body +='2';
});
app.use(async(ctx,next)=>{
ctx.body+='3';
next();
ctx.body+='4';
});
app.use(async(ctx,next)=>{
ctx.body+='5';
next();
ctx.body+='6'
});
//ctx是上下文,next是执行下一个中间件
app.listen(3000);
npm i koa-router
const Koa = require('koa');
// 直接调用的方式
const router = require('koa-router')();
// 或 单独创建router的实例
const Router = require('koa-router');
const router = new Router();
router.get('/', async ctx => {
ctx.body = 'Hello Router';
})
// 启动路由
app.use(router.routes()).use(router.allowedMethods())
// 以上为官方推荐方式,allowedMethods用在routes之后,作用是根据ctx.status设置response header.
app.listen(3000, err => {
if (err) throw err;
console.log('runing...');
});
let ctx = {
// 请求
request: {
method: 'GET',
url: '/',
// request header
header: {
host: '127.0.0.1:3030',
connection: 'keep-alive',
'cache-control': 'max-age=0',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
cookie: 'connect.sid=s%3AnQtQApNcQ55RmpjnkmQvWNTrdjYhZnlh.1FQUbVqpwpdRj8N6wjv8nOarf8hyzIpcxXN2LPYXGy0'
}
},
// 响应
response: {
status: 200,
message: 'ok',
header: {
'content-type': 'text/plain; charset=utf-8',
'content-length': '9'
}
},
app: {
subdomainOffset: 2,
proxy: false,
env: 'development'
},
originalUrl: '/',
// 原生Node的request对象
req: '<original node req>',
// 原生Node的reponse对象
res: '<original node res>',
socket: '<original node socket>'
}
requset ctx的请求对象
response ctx的响应对象
req Node的请求对象
res Node的响应对象
res.statusCode
res.writeHead()
res.write()
res.end()
ctx.state.userInfo = {
name: 'Jack',
age: 18
}