使用get 在 使用 express 加强过的 res的query的功能就能获取到;
而post 则得不到 需要借助工具;
而post一般也分两种;
普通 表单数据的上传(a=11&b=11)和 文件上传 (二进制);
现在先说 处理处理普通表单处理; 使用 express的中间件 body-parser;
后台js 部分
const express=require('express');
const fs = require('fs');
const path= require('path');
const server = express();
//post 拿到body的表单数据;
const bodyParser = require('body-parser');
//post 拿到文件的二进制数据;
// 使用bodyparser中间件;
server.use(bodyParser.urlencoded({extended:false}));
server.use('/',function (req,res) {
//res.body只能接受普通表单数据; 不能接受二进制文件数据
//使用bodyparse 中间件 才能得到res.body对象;注意
console.log(req.body);
res.send('ok');
});
server.listen(8080)
前台部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/" method="post" >
<div>内容:<input type="text" name="user" /></div>
<div><input type="submit" value="提交" /></div>
</form>
</body>
</html>
这样我就可以得到在 请求中 post携带的参数字符串了;
来说post文件;
首先我们要 知道 form 里的一个属性 (enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码)。
三个option:
application/x-www-form-urlencoded :在发送前编码所有字符 =&=, 处理普通表单数据的;
multipart/form-data :不对字符编码。在使用包含文件上传控件的表单时,必须使用该值;
ext/plain : 空格转换为 "+" 加号,但不对特殊字符编码。 很少用 可以自己研究下。
很明显 这次我们选用multipart/form-data
在服务端 处理 文件 使用 body-parser就不行了;需要 multer;
先cnpm i -S multer;安装一下;
代码
const express=require('express');
const fs = require('fs');
const path= require('path');
const server = express();
//post 拿到body的表单数据;
const bodyParser = require('body-parser');
//post 拿到文件的二进制数据;
const multer = require('multer');
//如果使用 需要调用生成对象;并且设置 上传存储的目录
const objMulter = multer({dest:'./www/upload'});
//使用 实例化对象的any方法;接受任何命名的文件;还有.single(fieldname);fieldname就是 input的name; 对应不上 报500;
server.use(objMulter.single('user'));
// 使用bodyparser中间件;
server.use(bodyParser.urlencoded({extended:false}));
server.use('/',function (req,res) {
//res.body只能接受普通表单数据; 不能接受二进制文件数据
console.log(req.file);
//使用bodyparse 中间件 才能得到res.body对象;注意
// console.log(req.body);
res.send('ok');
});
server.listen(8080)
会得到这个对象,但是dest的是一个乱码文件, 所以 这里需要改成对应的上传文件的extname扩展名;
{ fieldname: 'user',
originalname: '21531488494_.pic_hd.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: './www/upload',
filename: 'b30cd78a2dc06020af42920c9e2fce93',
path: 'www/upload/b30cd78a2dc06020af42920c9e2fce93',
size: 460460 }
这样写就完事了
const express=require('express');
const fs = require('fs');
const pathLib= require('path');
const server = express();
//post 拿到body的表单数据;
const bodyParser = require('body-parser');
//post 拿到文件的二进制数据;
const multer = require('multer');
//如果使用 需要调用生成对象;并且设置 上传存储的目录
const objMulter = multer({dest:'./www/upload'});
//使用 实例化对象的any方法;接受任何命名的文件;还有.single(fieldname);fieldname就是 input的name; 对应不上 报500;
server.use(objMulter.any());
// 使用bodyparser中间件;
server.use(bodyParser.urlencoded({extended:false}));
server.use('/',function (req,res) {
//res.body只能接受普通表单数据; 不能接受二进制文件数据
// 使用 multer 以后就可以使用 res.files
// console.log(req.files[0]);
//新的文件名字是 原来文件的乱码名字 + 原文件的扩展名
const newFileName = req.files[0].path + pathLib.extname(req.files[0].originalname);
// 使用fs的模块功能,把文件的名字替换
fs.rename(req.files[0].path,newFileName,function (err,data) {
if(err){
console.log(err);
}else{
console.log(data);
}
})
//使用bodyparse 中间件 才能得到res.body对象;注意
// console.log(req.body);
res.send('ok');
});
server.listen(8080)