使用express js的多部分表单数据post方法
Multipart form data post method using express js
我试图 post 将数据发送到我的 express js 服务器端。这是我的 pug
文件
form(action="/profile" method="post" enctype="multipart/form-data")
input(type="file" accept="image/*" name="profileimage")
input(type="text" name="username")
input(type="submit" value="Upload")
之后,我尝试在服务器端 js 中使用 req.body
记录 post 数据,如下所示。那是我的 profile.js
router.post('/', function (req, res) {
console.log('Body- ' + JSON.stringify(req.body));
});
这是我的控制台结果
body- {}
如果我 post 没有 enctype="multipart/form-data"
像 form(action="/profile" method="post")
,我可以从我的控制台结果中得到 post 数据。
你需要使用中间件来处理多部分表单数据,我认为最著名的是multer。
您可以在这里找到它:https://github.com/expressjs/multer
使用方法:
首先在你的根项目
中使用npm install --save multer
将它添加到你的模块中
然后在你的.js文件中导入它var multer = require('multer');
通过在 multer
构造函数中设置 dest
参数来选择上传目录:var upload = multer({ dest: 'uploads/' });
现在只需将它作为中间件传递到您的 POST 函数中,如下所示:
router.post('/', upload, function (req, res) {
console.log('Body- ' + JSON.stringify(req.body));
});
并且不要忘记阅读他们 github 存储库中的文档。
我认为 express-formidable
模块最适合向服务器发送 post 数据。
使用以下命令安装 express-formidable npm install express-formidable
下面是示例代码示例
let express = require('express');
let app = express();
let formidable = require('express-formidable');
let path = require('path');
app.use(formidable({
encoding: 'utf-8',
uploadDir: path.join(__dirname, 'uploads'),
multiples: true,
keepExtensions: true// req.files to be arrays of files
}));
app.post('/uploads',function(req,res){
console.log('Files '+JSON.stringify(req.files));// contains data about file fields
console.log('Fields '+JSON.stringify(req.fields));//contains data about non-file fields
});
您已在项目根目录中创建文件夹 uploads。与文件相关的所有数据都将在 req.files
中,non-file 数据将在 req.fields
中我已经将它与 ejs
模板引擎一起使用,它与 pug
。单击 This Link 了解有关 express-formidable
的更多信息
我试图 post 将数据发送到我的 express js 服务器端。这是我的 pug
文件
form(action="/profile" method="post" enctype="multipart/form-data")
input(type="file" accept="image/*" name="profileimage")
input(type="text" name="username")
input(type="submit" value="Upload")
之后,我尝试在服务器端 js 中使用 req.body
记录 post 数据,如下所示。那是我的 profile.js
router.post('/', function (req, res) {
console.log('Body- ' + JSON.stringify(req.body));
});
这是我的控制台结果
body- {}
如果我 post 没有 enctype="multipart/form-data"
像 form(action="/profile" method="post")
,我可以从我的控制台结果中得到 post 数据。
你需要使用中间件来处理多部分表单数据,我认为最著名的是multer。
您可以在这里找到它:https://github.com/expressjs/multer
使用方法:
首先在你的根项目
中使用npm install --save multer
将它添加到你的模块中然后在你的.js文件中导入它
var multer = require('multer');
通过在
multer
构造函数中设置dest
参数来选择上传目录:var upload = multer({ dest: 'uploads/' });
现在只需将它作为中间件传递到您的 POST 函数中,如下所示:
router.post('/', upload, function (req, res) { console.log('Body- ' + JSON.stringify(req.body)); });
并且不要忘记阅读他们 github 存储库中的文档。
express-formidable
模块最适合向服务器发送 post 数据。
使用以下命令安装 express-formidable npm install express-formidable
下面是示例代码示例
let express = require('express');
let app = express();
let formidable = require('express-formidable');
let path = require('path');
app.use(formidable({
encoding: 'utf-8',
uploadDir: path.join(__dirname, 'uploads'),
multiples: true,
keepExtensions: true// req.files to be arrays of files
}));
app.post('/uploads',function(req,res){
console.log('Files '+JSON.stringify(req.files));// contains data about file fields
console.log('Fields '+JSON.stringify(req.fields));//contains data about non-file fields
});
您已在项目根目录中创建文件夹 uploads。与文件相关的所有数据都将在 req.files
中,non-file 数据将在 req.fields
中我已经将它与 ejs
模板引擎一起使用,它与 pug
。单击 This Link 了解有关 express-formidable