1.安装
npm init -y
npm install koa --save
Hello world
index.js
const koa = require('koa')
const app = new koa()
app.use(async ctx => {
ctx.body = 'hello world'
})
app.listen(3000, () => {
console.log('服务开启成功在3000端口')
})
2、get/post请求接收
- get & post区别
- query &querystring区别
query:返回的是格式化好的参数对象
querystring: 返回的是请求字符串
-
get接收参数
-
post接收参数
-
koa-bodyparser
-
npm install koa-bodyparser --save
2.1ctx
2_get.js
const koa = require('koa') const app = new koa() app.use(async ctx => { // 获取访问路径 let url = ctx.url // 把url输出到http协议的响应体 ctx.body = { url } }) app.listen(3000, () => { console.log('服务开启成功在3000端口') })
ctx是context的缩写中文一般叫成上下文,这个在所有语言里都有的名词,可以理解为上(request)下(response)沟通的环境,所以koa中把他们两都封装进了ctx对象,koa官方文档里的解释是为了调用方便,ctx.req=ctx.request,ctx.res=ctx.response,类似linux系统中的软连接?最终执行还是request和response对象
body是http协议中的响应体,header是指响应头
ctx.body = ctx.res.body = ctx.response.body
输出:
2.2query &querystring
2_get.js
const koa = require('koa')
const app = new koa()
app.use(async ctx => {
let url = ctx.url
let query = ctx.query
let queryString = ctx.querystring
ctx.body = {
url,
query,
queryString
}
})
app.listen(3000, () => {
console.log('服务开启成功在3000端口')
})
2.3post
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>登陆页面</h1>
<form action="http://localhost:3000" method="post">
<p>
<label for="username">用户名</label>
<input type="text" id="username" name="username">
</p>
<p>
<label for="password">密 码</label>
<input type="text" id="password" name="password">
</p>
<input type="submit" value="提交">
</form>
</body>
</html>
3_post.js
const koa = require('koa')
const app = new koa()
app.use(async ctx => {
// 叠加数据
let data = ''
// 监听data事件,收到表单数据时就会执行
ctx.req.on('data', chunk => {
data += chunk
})
ctx.req.on('end', () => {
// 解码
data = decodeURI(data)
console.log(data)
})
// 必须要有一个返回,否则客户端404
ctx.body = '123'
})
app.listen(3000, () => {
console.log('服务开启成功在3000端口')
})
命令行输出:
服务开启成功在3000端口
username=wayliu&password=123456
2-4koa-body-parser
由于上面的命令行输出的key=value形式的字符串,很麻烦,所以用koa-body-parser中间件。
npm install koa-bodyparser --save
4_bodyparser.js
const koa = require('koa')
const app = new koa()
const bodyparser = require('koa-bodyparser')
app.use(bodyparser())
app.use(async ctx => {
let data = ctx.request.body
ctx.body = data
})
app.listen(3000, () => {
console.log('服务开启成功在3000端口')
})
2.5koa-router
npm install koa-router --save
基本使用
5_koa-router.js
const koa = require('koa')
const app = new koa()
const Router = require('koa-router')
const router = new Router()
router.get('/abc', (ctx, next) => {
ctx.body = 'wayliu'
})
router.get('/test', (ctx, next) => {
ctx.body = 'test'
})
app.use(router.routes())
app.use(router.allowedMethods())
app.listen(3000, () => {
console.log('服务器开启成功在3000端口')
})
加前缀
6_prefix.js
const koa = require('koa')
const app = new koa()
const Router = require('koa-router')
const router = new Router({
prefix: '/wayliu'
})
router.get('/abc', (ctx, next) => {
ctx.body = 'wayliu'
})
router.get('/test', (ctx, next) => {
ctx.body = 'test'
})
app.use(router.routes())
app.use(router.allowedMethods())
app.listen(3000, () => {
console.log('服务器开启成功在3000端口')
})
http://localhost:3000/wayliu/abc
abc
传参
7_params.js
const koa = require('koa')
const app = new koa()
const Router = require('koa-router')
const router = new Router({
prefix: '/wayliu'
})
router.get('/abc', (ctx, next) => {
ctx.body = ctx.query
})
router.get('/test', (ctx, next) => {
ctx.body = 'test'
})
app.use(router.routes())
app.use(router.allowedMethods())
app.listen(3000, () => {
console.log('服务器开启成功在3000端口')
})