在进行前端web开发中,处理请求体数据是一个非常常见的任务。Node.js中有很多用于解析请求体数据的包,但大多数都无法兼顾简洁性和可扩展性。在这份教程中,我们将来介绍npm包zan-co-body的使用,帮助大家轻松地进行请求体数据解析。
zan-co-body介绍
zan-co-body 是一个轻量级的Node.js请求体数据处理框架。它使用Koa的Generator-based中间件语法,同时也支持Async/Await语法。zan-co-body拥有简洁而易于使用的API,可处理JSON, form, text以及multipart/form-data数据格式。
zan-co-body安装
使用 npm 进行 zan-co-body 的安装:
npm install zan-co-body
zan-co-body使用
使用 zan-co-body 进行请求体处理的基本方法如下:
-- -------------------- ---- ------- ----- --- - --------------- ----- --------- - ----------------------- ----- --- - --- ------ --------------------- ------------------ ----- -- - ------------------------------ ----------------- - ------- --- -----------------
在上面的示例中,用 zan-co-body
包来解析请求体,然后将解析后的请求体数据以 ctx.request.body
的形式挂载在Koa单实例的上下文 ctx
中。这意味着无论我们的请求体是何种格式,我们都可以通过在 ctx.request.body
中访问到请求体数据。同时也因为在中间件链的最后一步,我们将回复一个回应请求。
zan-co-body API
zan-co-body 的 API 是非常灵活的。下面是一些常用的 API,使用及示例代码:
json
解析非严格式应用程序/ JSON编码请求体数据:
"json"
:使用JSON.parse()
解析请求体数据。
-- -------------------- ---- ------- ----- -------- - -------------------------------- ----- ------ - ----------------- ----- -- - ------------- ------------------ -- -- - -------------- ----- ------ -- -- - ---------- ----- --- ------ -- -- - ----- ----- - - ------ ------- -- ----- -------- - ------ ------ ------------ -- - ----- --- - ------ ------------------- --------- ---------------- -------------------- ------- -------- ------ -- -- ---- --------------------- --------- --- --- -------------------------------------- ---------- ----- ------------ -- -- - ----- ----- - - ------ ------- -- ----- -------- - ------ ------ ------------ -- - ----- ---- - ----------------------------------- ----- --- - ------ --------------- ---- - -------- ---------------- -------------------- ------- ------- ---- -- ------ -- -- ---- --------------------- ---------- --- -- -- --
form
解析x-www-form-urlencoded 编码请求体数据。
"form"
- 用于在解析请求体数据时启用此解析器。
-- -------------------- ---- ------- ----- -------- - -------------------------------- ----- ------ - ----------------- ----- -- - ------------- ------------------ -- -- - -------------- ----- ---- ------ -- -- - ---------- ----- --- ---------- ---- ------ -- -- - ----- ----- - - ------ ------- -- ----- -------- - ------ ------ ------------ -- - ----- ---- - -------------- ----- --- - ------ --------------- ---- - -------- ---------------- ------------------------------------- ------- ------- ---- -- ------ -- -- -- --- --------------------- ---------- --- --- --- ---
text
将流解析为字符串。
"text"
:用于在解析请求体数据时启用此解析器。
-- -------------------- ---- ------- ----- -------- - -------------------------------- ----- ------ - ----------------- ----- -- - ------------- ------------------ -- -- - -------------- ----- ---- ------ -- -- - ---------- ----- --- ---- ------ -- -- - ----- ----- - ----- -- - ------ ----- -------- - ------ ------ ------------ -- - ----- --- - ------ --------------- ---- --------- ---------------- -------------- ------- ------- ----- ------- ------ -- -- -- --- --------------------- ---------- --- -- -- --
multipart
解析一个 multipart/form-data
请求体。该请求体部分必须是具有Content-Disposition首部的part的集合。
"multipart[$]"
"multipart/related"
"multipart/alternative"
-- -------------------- ---- ------- ----- ------------- - ------------------------------------- ----- ------ - ----------------- ----- -- - ------------- ----- ---- - --------------- ----- -- - ------------- ----------------------- -- -- - --------- -- --------------- - -------------------- ------------ -------------- ----- --------- ------ -- -- - ---------- ----- --- --------- ------- ------ -- -- - ----- ----- - ------------------------------------------ ------------ ----------- -------- ----- -------- - - -- ----- ---- --------- - ---------------- ------------- ---------------------- ----------- --------------------- ---------------- ------------- ---------------------- ----------- -------------- ----------------------- -- -------- - -------------- -- ---- ------ - -- ------ ------------ -- - ----- --- - ------ -------------------- ---- - -------- ---------------- ------------------- --------------------------- ------- ------- ----- ----- -- ------ -- -- -- --- --------------------- --------- --- --- ---------- ----- --- --------- ----------- ------ -- -- - ----- ----- - ------------------------------------------ ------------ --------------- -------- ----- -------- - - -- ----- ---- ---- --------- - ---------------- -------------- ---------------- ------------ -- -------- - ------- ----- -- ----- ----- - -- ------ ------------ -- - ----- --- - ------ -------------------- ---- - -------- ---------------- ----------------------- --------------------------- ------- ------- ----- ----- -- ------ -- -- -- --- --------------------- --------- --- --- --- --
以上 API 中提到的请求体数据格式,我们将在下面的示例中进一步解释。
在Koa2中使用 zan-co-body
在Koa2中,API和Koa1稍有不同,需要使用轻量级的Koa中间件koaify
包装器来使得它们能够与Koa2兼容。
-- -------------------- ---- ------- ----- --- - --------------- ----- --------- - ----------------------- ----- --- - --- ------ ------------------- ---------- ---- ---- ------------------ ----- -- - ------------------------------ ----------------- - ------- --- -----------------
在这个例子中,我们添加了multipart选项为true。通过运行上面的代码,Koa2实例就可以使用zan-co-body所提供的中间件。
示例代码
为了进一步解释API,我们提供了以下例子代码。
以下是一个简单的示例代码,它将展示如何使用Koa中间件来解析不同的请求体数据格式。
-- -------------------- ---- ------- ----- --- - --------------- ----- --------- - ----------------------- ----- ------ - ------------------------ ----- --- - --- ------ -- ------- -------------------- ---------- ----- -- - ----- ---- - ----------------- -------- - - ----- ---- -- --- -- ------- -------------------- ---------- ----- -- - ----- ---- - ----------------- -------- - - ----- ---- -- --- -- ------------ ------------------------- ---------- ----- -- - ----- ---- - ----------------- -------- - - ----- ---- -- --- ------------------- ----- - --------------- ---- -- ---------- ----- ---------- ------ ---------- ------- ---- --- --------------------- ------------------------------ -----------------
在上面的示例代码中,我们使用路由器创建了3个路由,每个路由都有不同的数据格式。
我们现在来看看如何发送请求。使用Swagger,Postman或cURL等工具都是不错的选择。
- 以JSON格式发送请求
POST http://localhost:3000/json
Content-Type: application/json
Request Body:
{ "name": "Andy Lau", "age": 60, "gender": "Male" }
响应体会返回与请求体相同的对象。
body: { "data": { "name": "Andy Lau", "age": 60, "gender": "Male" } }
- 以form格式发送请求
POST http://localhost:3000/form
Content-Type: application/x-www-form-urlencoded
Request Body:
name=Andy+Lau&age=60&gender=Male
发送的请求体数据解析成了一个JavaScript对象,并返回与请求体相同的数据。
body: { "data": { "name": "Andy Lau", "age": "60", "gender": "Male" } }
- 以multipart格式发送请求
POST http://localhost:3000/multipart
Content-Type: multipart/form-data
Request Body:
------WebKitFormBoundaryY0DvcXUyG6Uxerdp Content-Disposition: form-data; name="photo"; filename="example.png" Content-Type: image/png PNG data ------WebKitFormBoundaryY0DvcXUyG6Uxerdp--
Request Body解析成JavaScript对象,并返回与请求体相同的数据。
body: { "data": { "photo": { "name": "example.png", "type": "image/png", "size": 8, "path": "/var/folders/1l/v8jlz6t50bj9fcx2x7zvwwtswwyj7z/T/upload_c3ed393e717d50da21f129134e6285de", "mtime": "2021-07-06T18:23:03.275Z" } } }
(注:示例代码中的keepExtensions
选项设置为true
,可以始终保留上传后文件的拓展名。)
总结
zan-co-body 是处理Node.js应用程序请求体数据的一种非常好用的包。它的API简洁而灵活,易于使用和扩展。相比其他请求体数据处理框架,zan-co-body内置了JSON、form、text和multipart等常见的请求体数据解析器,可以对不同的请求体进行解析,提高了应用程序的可用性。
在本教程中,我们介绍了zan-co-body的安装和使用,以及在Koa2中如何使用它。同时,我们还展示了一些示例代码,希望本文可以为大家提供帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600562e281e8991b448e0691