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

数据结构JavaScript描述——列表(一)

列表

定义

列表是一组有序的数据。每个列表中的数据称为 元素 。在JavaScript中,列表中的元素可以使任何数据类型,同时没有显示能保存多少元素

列表抽象数据类型定义

属性和方法

  • listSize 列表的元素个数
  • pos 列表的当前元素
  • length() 返回列表元素个数
  • clear() 清空列表所有元素
  • toString() 返回列表字符串形式
  • getElement()返回当前位置元素
  • insert() 在现有元素后插入新元素
  • append() 在列表末尾添加新元素
  • remove()从列表中删除元素
  • front()将列表的当前位置移动到第一个元素
  • end() 将列表当前位置移动到最后一个元素
  • prev()将当前位置后移一位
  • next()将当前元素前移一位
  • currPos()返回列表的当前位置
  • moveTo()将当前位置移动到指定位置

实现列表类

JavaScript Ajax封装 类似jQuery Ajax

_Ajax

简介

简单封装的ajax库
支持post和get方法 兼容IE7及以上浏览器
和jQuery Ajax格式相似

源码

源码

更新

已更新jsonp跨域支持

api

option

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
_Ajax({
"url":"",
"method":"",//默认get
"async":true,//默认为false
"data":{
},
"header":{
},
"cache":true,//默认为false
"dataType":"",//"text" "json" "xml" "jsonp"默认为text
success:function(){
},
beforeSend:function(){
}
})

libs:

通过 <script>标签引入<script src="lib/_Ajax.min.js" type="text/javascript" charset="utf-8"></script>
通过CDN获取http://ajax-10030624.file.myqcloud.com/_Ajax.js http://ajax-10030624.file.myqcloud.com/_Ajax.min.js

example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>_Ajax_Demo</title>
<script src= " lib/_Ajax.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<script type="text/javascript">
_Ajax({
"url":"server.php",
"method":"post",//默认get
"async":true,//默认为false
"data":{
"key":"value",
"key2":"value2"
},
"header":{
"h":"c",
"h2":"c2"
},
"cache":true,//默认为false
"dataType":"json",//"text" "json" "xml" 默认为text
success:function(data){
},
beforeSend:function(){
}
})
</script>
</body>
</html>

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数据

HTTP头Content-Type

Content-Type

  • application/x-www-form-urlencoded
    • 将数据编码为name->value的键值对
  • multipart/formdata
    • 将数据编码为一条信息
  • text/plain
    • 数据以文本形式传输
    • text
    • json
    • xml
    • html
    • zip
  • image/ipeg
    • 传输图片
    • png
    • gif
  • video/mp4
    • 视频
    • rmvb

form 的enctype

  • application/x-www-form-urlencoded 默认
  • miltipart/form-data

    get

    使用application/x-www-form-urlencoded将name->value转换为url里面的查询字符串

    post

    将数据封装到http 的请求体中。

Your browser is out-of-date!

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

×