koa2初识

247 阅读2分钟
  • koa2
  • koa-bodyparser -- 接收post请求参数转换的中间件
  • koa-router -- 请求路由
  • koa-static -- 静态资源访问中间件

1. 初始化 npm init

2.安装koa npm install koa

3 安装相关中间件

package.js

  "name": "jc",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
      "dependencies": {
    "koa": "^2.13.1",
    "koa-bodyparser": "^4.3.0",
    "koa-router": "^10.0.0",
    "koa-static": "^5.0.0",
  }
}

4 index.js

// router 中间件
const Router = require('koa-router');
// post请求参数转换
const BodyParser = require('koa-bodyparser');
// node原生文件路径
const path = require('path');
// 静态资源访问中间件
const static = require('koa-static')
 
const app = new Koa();
// 静态资源路径
const staticPath = "./static"
// 中间件 router
const router = new Router()
// 中间件获取post请求参数对象
const bodyparser= new BodyParser();
app.use(bodyparser);
app.use(static(path.join(__dirname,staticPath)))
// app.use(async (ctx)=>{
//     console.log(ctx)
//     if(ctx.url==="/original"&&ctx.method==="GET"){
//         ctx.body = '原生请求未使用router中间件'
//     }
// })
// get 请求
router.get('/',async(ctx)=>{
    ctx.body=`<form action="/getForm" method="get">
                <input type="submit" value="去post请求" />
              </form>`
})
// 获取表单页面进行post提交
router.get('/getForm',async(ctx)=>{
    // get 请求参数对象
    ctx.body=`<form action="/" method="post">
                <p>First name: <input type="text" name="fname" /></p>
                <p>Last name: <input type="text" name="lname" /></p>
                <input type="submit" value="Submit" />
              </form>`
})
// post请求
router.post('/',async(ctx)=>{
    // ctx.request.body 获取post请求参数对象(此时利用了bodyparser中间件)
    ctx.body=ctx.request.body
})
router.get('/setCookies',async(ctx)=>{
//   * ctx.cookies.set(name, value, [options])
//   * 通过 options 设置 cookie name 的 value
//   * maxAge 一个数字表示从 Date.now() 得到的毫秒数
//   * signed cookie 签名值
//   * path cookie 路径, 默认是'/'
//   * domain cookie 域名
//   * secure 安全 cookie
//   * httpOnly 服务器可访问 cookie, 默认是 true
//   * overwrite 一个布尔值,表示是否覆盖以前设置的同名的 cookie (默认是 false)
//   * 如果是 true, 在同一个请求中设置相同名称的所有 Cookie(不管路径或域)是否在设置此Cookie 时从 Set-Cookie 标头中过滤掉。

    ctx.cookies.set(
        "cookies","cookies",{
            // maxAge:10000,
            expires:new Date("2021-06-24"),
            overwrite:false,
        }
    )
    // ctx.request.body 获取post请求参数对象(此时利用了bodyparser中间件)
    ctx.body="setCookies"
})

router.get('/getCookies',async(ctx)=>{
    // ctx.request.body 获取post请求参数对象(此时利用了bodyparser中间件)
    ctx.body= ctx.cookies.get("cookies")
})
// app.use(async ctx => {
//     console.log(ctx.url)
    
//   ctx.body = 'Hello World';
// });
app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3000,()=>{
  console.log("服务器已启动...")
});

5 node index.js 启动