body-parser与querystring与multer的区别
body-parser express中间件
body-parser是用来解析http请求体的,是express默认使用的中间件之一。
(只解析post的普通数据请求,无法解析post文件请求)
使用方法:
const bodyParser=require('body-parser');
app.use=(bodyParser.json);//解析为json格式
app.use=(bodyParser.urlencoded({extended:false}));
//解析表单类提交的数据,也就是请求体中Content-Type: application/x-www-form-urlencoded的数据
//返回的对象是一个键值对,当extended为false,键的值为'String'或'Array',为true则可为任何数据类型。
Content-Type的四种类型:
application/x-www-form-urlencoded 常见的form提交
multipart/form-data 文件提交
application/json 提交json格式的数据
text/xml 提交xml格式的数据
querystring node内建对象
querystring是node的内建对象之一,用来将字符串解析为对象,不支持多级嵌套字符串的解析。
使用方法:
querystring.parse("info[name]=henry&info[age]=30&hobby[1]=sport&hobby[2]=coding")
解析结果:{
'info[name]': 'henry',
'info[age]': '30',
'hobby[1]': 'sport',
'hobby[2]': 'coding'
}
qs 第三方插件
是querystring的一个库,支持多级字符串嵌套解析。(最多只解析5层嵌套)
使用方法:
qs.parse("info[name]=henry&info[age]=30&hobby[1]=sport&hobby[2]=coding")
解析结果:{ info: {
name: 'henry',
age: '30'
},
hobby: [ 'sport', 'coding' ]
}
multer express的上传文件中间件
body-parser只支持post请求的普通数据解析,multer支持对post请求的文件解析。
使用方法:
1.必须指定表单form类型enctype="multipart/form-data" method="post"
2.const multerObj=multer({dest: './static/upload'});//上传文件路径
3.app.use(multerObj.any();)//上传文件类型任意
4.若是静态文件,需要通过express.static()方法设置
app.use('/upload',express.static(path.join(__dirname,'upload')))
//前面的uploads是一个挂载路径,后面是当前项目的完整绝对路径