最近学习了Koa框架中用到了koa-bodyparser接收表单POST请求的参数,直接使用其API是很容易的,但却不知道其原生方法怎么实现的。故做些笔记

首先,是搭建了Koa的服务器不再赘述

其次,在做表单POST请求时,用到两个自定义封装的函数:

 const Koa = require('koa')
const app = new Koa() app.use((ctx) => {
console.log(ctx)
ctx.body = cxt
})
app.listen(3000)

由控制台或者body都可以打印出ctx是一个json对象

然而post发送的参数是存储在ctx.req中的,直接将ctx.req传给body是无法取得,需要通过原生方法去处理。

 const Koa = require('koa')
const app = new Koa() app.use(async (ctx) => {
if (ctx.url === '/' && ctx.method === 'GET') {
let html = `
<form method="post" action="/">
<input type="text" name="user">
<input type="text" name="age">
<input type="submit" value="提交">
</form>
`
ctx.body = html;
} else if (ctx.url === '/' && ctx.method === 'POST') {
let postData = await parserData(ctx)
console.log(ctx.req)
ctx.body = postData
} else {
ctx.body = '404'
}
}) // bodyParser的原生方法, 获取post请求的字符串 user=make&age=28
function parserData(ctx) {
return new Promise((resolve, reject) => {
try {
let postData = ''
ctx.req.addListener('data', (data) => {
postData += data
})
ctx.req.on('end', function () {
postData = parserQueryString(postData)
resolve(postData)
})
} catch (err) {
reject(err)
}
})
} // 将post请求的query转为json对象格式
function parserQueryString(str) {
let queryData = {}
let queryStrList = str.split('&')
// entries()返回带索引的数组
for (let [index, queryStr] of queryStrList.entries()) {
let itemList = queryStr.split('=')
/*以键值对方式存入queryData*/
queryData[itemList[0]] = decodeURIComponent(itemList[1])
}
return queryData;
} app.listen(3000, () => {
console.log('Server running at http://localhost:3000')
})

node中中间件body-parser的实现方式的更多相关文章

  1. 使用express+multer实现node中的图片上传

    使用express+multer实现node中的图片上传 在前端中,我们使用ajax来异步上传图片,使用file-input来上传图片,使用formdata对象来处理图片数据,post到服务器中 在n ...

  2. node中的Stream-Readable和Writeable解读

    在node中,只要涉及到文件IO的场景一般都会涉及到一个类-Stream.Stream是对IO设备的抽象表示,其在JAVA中也有涉及,主要体现在四个类-InputStream.Reader.Outpu ...

  3. 深入理解jQuery、Angular、node中的Promise

    最初遇到Promise是在jQuery中,在jQuery1.5版本中引入了Deferred Object,这个异步队列模块用于实现异步任务和回调函数的解耦.为ajax模块.队列模块.ready事件提供 ...

  4. Node中的定时器详解

    在大多数的业务中,我们都会有一些需求,例如几秒钟实现网页的跳转,几分钟对于后台数据进行清理,node与javascript都具有将代码延迟一段时间的能力.在node中可以使用三种方式实现定时功能:超时 ...

  5. node中的可读流和可写流

    javascript的一个不足之处是不能处理二进制数据,于是node中引入了Buffer类型.这个类型以一个字节(即8位)为单位,给数据分配存储空间.它的使用类似于Array,但是与Array又有不同 ...

  6. android中解析文件的三种方式

    android中解析文件的三种方式     好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...

  7. 重回博客 谈一谈Node中的异步和单线程

    重回博客,这个帐号之前注册后就只发了一篇博客.听朋友建议,决定一周两次更新. 第一篇谈论一下最近想的比较多的异步的问题. 传统多线程异步 传统的异步是多线程的,当要同时做两件事的时候,他们是执行在不同 ...

  8. JS中事件绑定的三种方式

    以下是搜集的在JS中事件绑定的三种方式.   1. HTML onclick attribute     <button type="button" id="upl ...

  9. 简单剖析Node中的事件监听机制(一)

    使用js的class类简单的实现一个事件监听机制,不同于浏览器中的时间绑定与监听,类似于node中的时间监听,并且会在接下来的文章中去根据自己的理解去写一下Event模块中的原理. Node.js使用 ...

随机推荐

  1. PCI 设备调试手段

    Author: Younix Platform: RK3399 OS: Android 6.0 Kernel: 4.4 Version: v2017.04 一PCI 设备调试手段 busybox ls ...

  2. EF Code First模型约束

    总之,EF比较复杂.如果不想深究,建议简单用用.基本对应就行,大项目标准开发还是ModelFirst(先建立DB各种约束),然后再c#类约束.定义. 当然写原型时用ef很快.

  3. PHP进阶-PHP执行和加速原理

  4. easyui中多级表头,主表头不能添加field字段,否则不居中

    <th field="" width="120" align="center" align="center" co ...

  5. 洛谷P2329 栅栏 [SCOI2005] 搜索

    正解:搜索 解题报告: 先放下传送门! 首先说下爆搜趴,就直接枚每个需求是否被满足以及如果满足切哪个板子,随便加个最优性剪枝,似乎是有80pts 然后思考优化 首先显然尽量满足需求比较小的,显然如果能 ...

  6. 所使用的“System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35”版本高于所引用的程序集“System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”的版本

    System.Web.Mvc.dll引用是感叹号. 解决方法:新建mv3应用程序,右键选择System.Web.Mvc.dll 查看所引用的路径. 在旧程序中重新引用即可.C:\Program Fil ...

  7. vim常用指令整理小结

    启动Vim后,默认是在 Normal 模式下,但是我们有时不知道是在编辑模式还是normal模式,按ESC键就可以返回normal模式.因为所有的命令都需要在Normal模式下使用,所以建议多按几下E ...

  8. what's the python之if判断、while循环以及for循环

    Python缩进原则 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进 同一级别的代码,缩进必须一致 官方建议缩进用4个空格 Python程序语言指定任何非0和非空的布 ...

  9. Python3学习之路~6.2 实例演示面向对象编程的好处

    首先建一个dog类,实例化为3个dog对象,并让它们都叫. class Dog: def bulk(self): print("xiaohuang:wang wang wang !" ...

  10. 这可能是由于 CredSSP 加密 Oracle 修正。

    1.Win+R 输入regedit打开注册表 找到对应的以下目录 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Polici ...