1、koa2 路由配置
const Koa = require('koa')
const router = require('koa-router')()
const app = new Koa()
router
.get('/', async (ctx) => {
ctx.body = '首页'
})
.get('/news', async (ctx) => {
ctx.body = '新闻页'
})
// 启动路由
// router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
app
.use(router.routes())
.use(router.allowedMethods())
app.listen(3000, () => {
console.log('服务器已启动')
})
2、koa2 中的 get 传值以及获取 get 传值
- 在 koa2 中,GET 传值通过 request 参数接收,但接收的方式有2种,query 和 querystring
1、query:返回的是格式化好的参数对象
2、querystring:返回的是请求字符串
const Koa = require('koa')
const router = require('koa-router')()
const app = new Koa()
router
.get('/', async (ctx) => {
ctx.body = '首页'
})
.get('/news', async (ctx) => {
// 从 ctx 中获取 get 传值
console.log(ctx.query); // {id: '123'}
console.log(ctx.querystring); // id=123&name=lisi
console.log(ctx.url); // 获取 url 地址
// 从 ctx 里面的 request 获取 get 传值
console.log(ctx.request.query);
console.log(ctx.request.querystring);
console.log(ctx.request.url);
ctx.body = '新闻页'
})
// 启动路由
// router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
app
.use(router.routes())
.use(router.allowedMethods())
app.listen(3000, () => {
console.log('服务器已启动')
})
3、koa2 动态路由
const Koa = require('koa')
const router = require('koa-router')()
const app = new Koa()
router
.get('/', async (ctx) => {
ctx.body = '首页'
})
.get('/news/:name', async (ctx, next) => {
// 获取动态路由的传值
console.log(ctx.params); // { name: 'sjb' }
ctx.body = '新闻页'
})
// 启动路由
// router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
app
.use(router.routes())
.use(router.allowedMethods())
app.listen(3000, () => {
console.log('服务器已启动')
})
4、koa2 中 ejs 模板引擎的使用
- 安装 koa-views 和 ejs
npm install --save koa-views
npm install ejs --save
const Koa = require('koa')
const router = require('koa-router')()
// 引入 koa-views 配置中间件
const views = require('koa-views')
const app = new Koa()
// ejs 模板引擎有2种配置方式,区别是模板文件的后缀名不同
// app.use(views('views', {
// map: {html: 'ejs'} // views 文件中的模板后缀名应为 .html
// }))
app.use(views('views', {
extension: 'ejs' // views 文件中的模板后缀名应为 .ejs
}))
// koa中使用ejs
router.get('/news', async (ctx) => {
let title = 'sjb'
await ctx.render('index', {
title: title // 绑定数据
})
})
// 启动路由
// router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
app
.use(router.routes())
.use(router.allowedMethods())
app.listen(3000, () => {
console.log('服务器已启动')
})
- Ejs引入模板
<%- include public/header.ejs %>
- Ejs绑定数据
<%=title%>
- Ejs绑定html数据
<%-h%>
- Ejs模板判断语句
<% if(true){ %>
true
<%} else{ %>
false
<%} %>
<% for(let i = 0; i < list.length; i++) { %>
<% =list[i] %>
<% } %>
5、koa2 中 ejs 模板引擎在中间件中配置公共数据
const Koa = require('koa')
const router = require('koa-router')()
const views = require('koa-views')
const app = new Koa()
app.use(views('views', {
extension: 'ejs'
}))
// 注意:我们需要在每一个路由的 render 里面都要渲染一个公共的数据
/*
ctx.state = { // 放在中间件里面
session: this.session, // 公共数据
title: 'app'
};
*/
// 写一个中间件配置公共的信息
app.use(async (ctx, next) => {
ctx.state = {
session: 'session'
};
await next()
// await ctx.render('user', {
// user: 'John'
// });
});
router.get('/news', async (ctx) => {
let list = ['sjb','s','d']
await ctx.render('index', {
list
})
})
// 启动路由
// router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
app
.use(router.routes())
.use(router.allowedMethods())
app.listen(3000, () => {
console.log('服务器已启动')
})
6、koa2 中 cookies 的使用
const Koa = require('koa')
const router = require('koa-router')()
const render = require('koa-art-template')
const path = require('path')
const app = new Koa()
render(app, {
root: path.join(__dirname, 'views'), // 模板视图的位置
extname: '.html', // 模板的后缀名
debug: process.env.NODE_ENV !== 'production' // 是否开启调试模式
})
router
.get('/', async (ctx) => {
let data = '苏'
let val = new Buffer(data).toString('base64') // 设置cookies时,先把中文字符转化为 base64 字节码
ctx.cookies.set('name', val, {
maxAge: 1000*60*60
})
await ctx.render('index')
})
.get('/news', async (ctx) => {
let data = ctx.cookies.get('name')
let val = new Buffer(data, 'base64').toString() // 取cookies值时,再用 base64 字节码转化成中文字符
console.log(val)
ctx.body = '新闻页' + val
})
// 启动路由
// router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
app
.use(router.routes())
.use(router.allowedMethods())
app.listen(3000, () => {
console.log('服务器已启动')
})
7、koa2 中 session 的使用
const Koa = require('koa')
const router = require('koa-router')()
const render = require('koa-art-template')
const path = require('path')
const session = require('koa-session')
const app = new Koa()
render(app, {
root: path.join(__dirname, 'views'), // 模板视图的位置
extname: '.html', // 模板的后缀名
debug: process.env.NODE_ENV !== 'production' // 是否开启调试模式
})
// 配置 session
app.keys = ['some secret hurr'] // session 签名
const CONFIG = {
key: 'koa:sess', // cookie key (default is koa:sess)
maxAge: 50000, // cookie 的过期时间 maxAge in ms (default is 1 days)
autoCommit: true, // 自动将 session 值提交到请求头部上
overwrite: true, // 是否会覆盖之前设置同名的
httpOnly: true, // cookie 是否只有服务器端可以访问 httpOnly or not (default true)
signed: true, // 签名默认 true
rolling: false, // 在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)
renew: false, // (boolean) renew session when session is nearly expired,
sameSite: null, // (string) session cookie sameSite options (default null, don't set it)
}
app.use(session(CONFIG, app))
router
.get('/', async (ctx) => {
ctx.session.username = 'sjb'
await ctx.render('index')
})
.get('/news', async (ctx) => {
console.log(ctx.session.username)
ctx.body = '新闻页' + ctx.session.username
})
// 启动路由
// router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
app
.use(router.routes())
.use(router.allowedMethods())
app.listen(3000, () => {
console.log('服务器已启动')
})
网友评论