koa2-formidable

介绍

简单封装的formidablekoa2的中间件。
因为今天我把我的毕设后台从koa1升级到koa2了,全面使用async函数,所以之前用的
koa-formidable就不合适了,索性就自己封装下。

npm body-parser 中文api

#body-parser

node.js body parsing 中间件

安装

1
$ npm install body-parser

API

1
var bodyPaeser =require('body-parser')

可以通过body-parser 对象创建中间件,当接收到客户端请求时所有的中间件都会给req.body 添加属性,请求体为空,则解析为空{} (或者出现错误)。

bodyParser.json(options)

中间件只会解析 json ,允许请求提任意Unicode编码支持 gzipdeflate 编码。

options

一个对象,有以下属性

inflate

默认为false,true->压缩的请求体会被解压,false->压缩的请求提不被解压。

limit

控制请求体最大大小,默认为100kb,当为数字时会转换为bytes,当为字符串时,value值会通过 bytes库 转换为字节大小。

reviver

此选项会通过JSON.parse直接传给其第二个参数。

strict

默认为true,当为true时只接受数组和对象,当为false时会接受任何JSON.parse 能接受的。

type

type 选项用来决定中间件要解析媒体类型。选项可以是一个函数或者是字符串。当为字符串时,可以直接通过type-is 库直接传递给选项,字符串也可以为一个扩展名(例如json)、mime 类型(application/json、/ 、*/json)。当为函数时:默认为application/json。

verify

verify选项,若缺失则为一个函数function(req,res,buf,encoding),buf为一个Buffer。

bodyParse.raw(option)

将请求体内容作为Buffer来处理,并返回。支持gzip deflate 压缩。

inflate

limit

type

verify

bodyParser.text(option)

将请求提内容作为字符串来处理,并返回。支持gzip deflate 压缩。

defaultCharset

若请求头未设置Content-Type则默认为utf8

inflate

type

verify

bodyParser.urlencoded(option)

中间件只解析urlencoded 请求体,并返回,只支持UTF-8编号文本,支持gzip deflate 压缩。

extend

ture->使用queryString库(默认) false->使用qs库。

limit

parameterlimit

指定parameters最长长度,默认1000

type

verify

Node.js 使用formidable上传文件及接受POST数据

formidable

官方文档

安装

1
$ npm install formidable

使用

1
2
var formidable=require("formidable");
var form=formidable.IncomingForm();

API

form的属性及方法

  • encoding 设置字符集 默认UTF-8

  • uploadDir 默认文件上传缓存位置 默认为OS_TEMP位置

  • type 选择接受是multipart还是urlencoded的Content-Type请求头 默认全部

  • maxFieldSize 限制文件大小 默认 2mb 单位 字节

  • maxDields 限制header Format长度 默认为1000 为0则不限制

  • multiples 一次上传多个文件 默认为false 需要在input标签设置HTML5属性 multiple

  • hash

  • bytesReceived 目前接收到的字节数。

  • bytesExpected 预定总大小 字节

  • parse(req,[cb])

    • req 是HttpIncomingMeassage对象
    • cb 为callback函数 function(err,field,files)
      • err 错误
      • field 对象 是http请求Format的键值对即application/x-www-urlencoded内容
      • files 接收到的文件对象(当接受多个文件时为一个数组)
        • files.size 文件大小 单位是字节
        • files.path 缓存的目录及名字
        • files.name 上传时候的文件名
        • files.type 文件后缀类型 image/gif之类
        • files.mtime 最后修改时间

    事件

    form.on('event',function(){})

    • progress
      • .on(‘progress’,function(bytesReceived,bytesExpected){})
    • field
      • .on(‘field’,function(name,value){})
    • fileBegin
      • .on(‘fileBegin’,function(name,value){})
    • file
      • .on(‘file’,function(name,file){})
    • error
      • .on(‘error’function(err){})
    • aborted
      • .on(‘aborted’,function(){})
    • end
      • .on(‘end’,function(){})

DEMO

客户端

demo.html

1
2
3
4
5
  <form action="post" enctype="multipart/form-data" method="post">
<input type="file" name="file" multiple="multiple">
<input type="text" name="zhang">
<input type="submit">
</form>

服务端

app.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var http = require("http");
var express = require("express");
var app = express();
app.use(express.static('public',{"index":"demo.html"}));
var formidable = require("formidable");
app.post('/public/post', function(req, res) {
var form = new formidable.IncomingForm();
form.encoding = "utf-8";
form.uploadDir = __dirname + '/tmp';
form.multiples = true;
form.parse(req, function(err, field, files) {
files.field = field;
res.json(files);
console.log(files);
})
})

运行

1
$ node app.js
添加字段和要上传的文件即可获得返回的json数据同时控制台输出json数据

源码

Node.js 使用formidable上传文件及接受POST数据

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×