koa2基础知识巩固梳理2

    科技2025-06-04  31

    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端口') })

    Processed: 0.012, SQL: 8