xiaohuihui
for me

koa

2020-09-27 14:20:18
Word count: 1.3k | Reading time: 6min

Koa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//引入koa模块
var koa = require('koa');
var app = new koa();

//引入并实例化路由
var router = require('koa-router')();


//ctx表示上下文,包含了request和response
//配置路由
router.get('/',async (ctx)=>{
ctx.body = '首页';
}).get('/news',async (ctx)=>{
//从ctx中获取get传值
console.log(ctx.query); //以对象形式返回
console.log(ctx);
ctx.body = '这是新闻页面';
})
.get('/newscontent/:aid',async (ctx)=>{
console.log(ctx.params)
ctx.body = '新闻详情'
})

//启动路由
app
.use(router.routes())
.use(router.allowedMethods()); //自动设置响应头

app.listen(3000);
console.log("http://127.0.0.1:3000")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//引入koa模块

var koa = require('koa');
var app = new koa();

var router = require('koa-router')();


//匹配路由之前打印日期
//应用级中间件,匹配路由之前做的操作
app.use(async (ctx,next)=>{
console.log("这是一个中间件");
await next();
if(ctx.status == 404){
ctx.body = '这是一个404页面'
}else{
console.log(ctx.url);
}
})

//ctx表示上下文,包含了request和response
//配置路由
router.get('/',async (ctx)=>{
ctx.body = '首页';
}).get('/news',async (ctx)=>{
//从ctx中获取get传值
// console.log(ctx.query); //以对象形式返回
// console.log(ctx);
console.log('这是一个新闻页面')
ctx.body = '这是新闻页面';

})
.get('/newscontent/:aid',async (ctx)=>{
console.log(ctx.params)
ctx.body = '新闻详情'
})

//启动路由
app
.use(router.routes())
.use(router.allowedMethods()); //自动设置响应头

app.listen(3000);
console.log("http://127.0.0.1:3000")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//引入koa模块

var koa = require('koa');
var app = new koa();

var router = require('koa-router')();
var views = require('koa-views');
// var common = require('./node_modules/common.js');
var bodyParser = require('koa-bodyparser');

//引入静态资源中间件
const static = require('koa-static');

// console.log(__dirname + '/public')

//配置模板引擎中间件
//app.use(views('views',{map:{html:'ejs'}})) //这样配置也可以
app.use(views('views',{
//应用ejs模板引擎
extension:'ejs'
}))

//配置post bodyparser的中间件
app.use(bodyParser())

//http://localhost:3000/css/basic.css 首先去static目录找,找不到就next()
//配置静态web服务中间件
app.use(static('./static'));

//ctx表示上下文,包含了request和response
//配置路由
router.get('/',async (ctx)=>{
let title = "你好,ejs";
await ctx.render('index',{
title:title
})
})

.get('/news',async (ctx)=>{
//从ctx中获取get传值
// console.log(ctx.query); //以对象形式返回
// console.log(ctx);
console.log('这是一个新闻页面')
ctx.body = '这是新闻页面';
})

.get('/newscontent/:aid',async (ctx)=>{
console.log(ctx.params)
ctx.body = '新闻详情'
})


//接收post提交的数据
router.post('/doAdd',async (ctx)=>{
//获取表单提交的数据
console.log(ctx.request.body);
ctx.body = ctx.request.body;

})

//启动路由
app
.use(router.routes())
.use(router.allowedMethods()); //自动设置响应头

app.listen(3000);
console.log("http://127.0.0.1:3000")

koa-session

session简介:

session是另一种记录客户状态的机制,不同的是Cookie保存在客户端保存在浏览器中,而session保存在服务器上。

session工作流程:

​ 当浏览器访问服务器并发送第一次请求时,服务器就会创建一个session对象,生成一个类似于key,value键值对,然后将key(cookie)返回到客户端,浏览器再次访问的时候,携带key(cookie),找到对应的session(value)。客户的信息都保存再session中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//引入koa模块

const koa = require('koa');
const app = new koa();

const router = require('koa-router')();
const views = require('koa-views');
// var common = require('./node_modules/common.js');
const bodyParser = require('koa-bodyparser');

//引入静态资源中间件
const static = require('koa-static');

//cookie用于存储访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域名的时候共享数据

const session = require('koa-session');

//配置模板引擎中间件
//app.use(views('views',{map:{html:'ejs'}})) //这样配置也可以
app.use(views('views',{
//应用ejs模板引擎
extension:'ejs'
}))

//配置post bodyparser的中间件
app.use(bodyParser())


//http://localhost:3000/css/basic.css 首先去static目录找,找不到就next()
//配置静态web服务中间件
app.use(static('./static'));


//配置session中间件
app.keys = ['some secret hurr']; //cookie的签名

const CONFIG = {
key: 'koa.sess', /** (string) cookie key (default is koa.sess) */
/** (number || 'session') maxAge in ms (default is 1 days) */
/** 'session' will result in a cookie that expires when session/browser is closed */
/** Warning: If a session cookie is stolen, this cookie will never expire */
maxAge: 86400000,
autoCommit: true, /** (boolean) automatically commit headers (default true) */
overwrite: true, /** (boolean) can overwrite or not (default true) */
httpOnly: true, //表示只有服务器端可以获取cookie
signed: true, //默认签名
rolling: false, //在每次请求时强行设置cookie,这将重置cookie过期时间,默认false
renew: true, //当session快过期的时候重新设置session
// secure: true, /** (boolean) secure cookie*/ //改false
sameSite: null, /** (string) session cookie sameSite options (default null, don't set it) */
};
//使用session中间件
app.use(session(CONFIG, app));

//ctx表示上下文,包含了request和response
//配置路由
router.get('/',async (ctx)=>{
//获取session
console.log(ctx.session.userinfo)
let title = "你好,ejs";
await ctx.render('index',{
title:title
})
})

.get('/news',async (ctx)=>{
//从ctx中获取get传值
// console.log(ctx.query); //以对象形式返回
// console.log(ctx);
//读取cookie
// var userinfo = ctx.cookies.get('userinfo')
// console.log(userinfo)
ctx.body = '这是新闻页面';
})

.get('/newscontent/:aid',async (ctx)=>{
console.log(ctx.params)
ctx.body = '新闻详情'
})

.get('/login',async (ctx)=>{
//这只session
ctx.session.userinfo = '张三'
ctx.body = "登录成功"
})


//接收post提交的数据
router.post('/doAdd',async (ctx)=>{
//获取表单提交的数据
console.log(ctx.request.body);
ctx.body = ctx.request.body;

})

//启动路由
app
.use(router.routes())
.use(router.allowedMethods()); //自动设置响应头

app.listen(3000);
console.log("http://127.0.0.1:3000")

Author: 小灰灰

Link: http://xhh460.github.io/2020/09/27/koa/

Copyright: All articles in this blog are licensed.

< PreviousPost
Servlet
NextPost >
JDBC
CATALOG
  1. 1. Koa
    1. 1.0.1. koa-session