Koa2 学习笔记(第三天)
来源:互联网 发布:程序化交易软件下载 编辑:程序博客网 时间:2024/05/29 15:37
请求参数的获取
GET
首先我们需要知道的是,在Koa2中,提供了一个 content (上下文)对象,里面封装了Koa2的 request 和 response 以及原生Node的 req (Node的request) 和 res (Node的response)
另外一点是 ctx 可以直接使用 request 和 response 的属性 (通过中间件得到的挂在request 和 response 的属性是不能直接通过 ctx 拿到的)
在KOA2中,GET参数是在 request 对象中取到的,所以可以通过两种方式拿到:
const Koa = require('koa')const app = new Koa()const port = process.env.port || 3000app.use( ctx => { let request = ctx.request let request_query = request.query let request_querystring = request.querystring let ctx_query = ctx.query let ctx_querystring = ctx.querystring ctx.body = { request_query, request_querystring, ctx_query, ctx_querystring }})app.listen(port )console.log(`The project is strated at ${port}`)
POST
在Koa2中不能很好的处理POST参数,只能使用原生Node来处理
const Koa = require('koa')const app = new Koa()const port = process.env.port || 3000app.use( async (ctx) => { if (ctx.url === '/' && ctx.method === 'GET') { let html = ` <form method="POST" action="/"> <p>用户名</p> <input name="username" type='text' /><br/> <p>密码</p> <input name="password" type='password' /><br/> <p>邮箱</p> <input name='email' /> <br /> <button type="submit">提交</button> </form> ` ctx.body = html } else if (ctx.url === '/' && ctx.method === 'POST') { let data = await postData(ctx) ctx.body = data }})function postData(ctx) { return new Promise((resolve, reject) => { try { let str = '' ctx.req.on('data', (data) => { str += data }) ctx.req.on('end', () => { let postdata = parser(str) resolve(postdata) }) } catch (err) { reject(err) } })}function parser(str) { let json = {} let arr = str.split('&') for (let [index, data] of arr.entries()) { let dataList = data.split('=') json[dataList[0]] = decodeURIComponent(dataList[1]) } return json}app.listen(port )console.log(`The project is strated at ${port}`)
原生的比较麻烦,不过我们可以使用中间件
npm i koa-bodyparser -S
koa-bodyparser 把 post 数据处理到 request.body 中,注意不是 response.body 所以不能通过 ctx 直接拿到
const Koa = require('koa')const app= new Koa()const port = process.env.port || 3000const bodyparser = require('koa-bodyparser')app.use(bodyparser())app.use( async (ctx) => { if (ctx.url === '/' && ctx.method === 'GET') { let html = ` <form method="POST" action="/"> <p>用户名</p> <input name="username" type='text' /><br/> <p>密码</p> <input name="password" type='password' /><br/> <p>邮箱</p> <input name='email' /> <br /> <button type="submit">提交</button> </form> ` ctx.body = html } else if (ctx.url === '/' && ctx.method === 'POST') { let data = ctx.request.body ctx.body = data }})app.listen(port )console.log(`The project is strated at ${port}`)
至此,
我们可以通过Koa2封装的 ctx 对象的 request 对象拿到 GET 参数
通过koa-bodyparser 这个中间件拿到 POST 参数。
阅读全文
1 0
- Koa2 学习笔记(第三天)
- Koa2 学习笔记(第一天)
- Koa2 学习笔记(第五天)
- 第三天学习笔记
- 第三天学习笔记
- 学习笔记第三天
- Koa2 学习笔记(第二天)
- Koa2 学习笔记(第四天)
- hibernate学习笔记第三天(1)
- hibernate学习笔记第三天(2)
- Hibernate学习笔记(第三天)
- Struts2学习笔记(第三天)
- JavaScript学习笔记(第三天)
- 嵌入式学习笔记(第三天)
- Css 学习笔记第三天
- Struts学习笔记第三天
- Android学习笔记: 第三天
- java学习笔记--第三天
- 大型网站核心要素和高性能架构
- ccpc网络赛 E
- 算法提高 ADV-69 质因数
- 我的开始
- 【POJ】2236
- Koa2 学习笔记(第三天)
- Java连接SQL Server 2008和My SQL数据库的简单操作(2)
- lua 赋值语句
- 使用静态方法来startActivity
- 算法提高 ADV-70 冒泡法排序
- 文件的打开模式和文件对象方法
- MySQL常见问题及解决方案
- JAVA-反射机制(2)
- Notepad++编译解释java程序方法