使用express js的多部分表单数据发布方法

时间:2018-03-02 10:38:06

标签: javascript express pug multipartform-data

我试图将表单数据发布到我的快速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记录发布数据,如下所示。那是我的profile.js

router.post('/', function (req, res) {
  console.log('Body- ' + JSON.stringify(req.body));
});

这是我的控制台结果 body- {}

如果我发布enctype="multipart/form-data"之类的form(action="/profile" method="post"),我可以从我的控制台结果中获取发布数据。

2 个答案:

答案 0 :(得分:0)

您需要使用中间件来处理多部分表单数据,我认为最着名的是 multer

您可以在此处找到它:https://github.com/expressjs/multer

使用它:

  1. 首先将其添加到根项目中npm install --save multer的模块
  2. 然后将其导入.js文件var multer = require('multer');
  3. 通过在dest构造函数中设置multer参数来选择上传目录:var upload = multer({ dest: 'uploads/' });
  4. 现在只需将其作为POST功能的中间件传递,如下所示:
  5. router.post('/', upload, function (req, res) { console.log('Body- ' + JSON.stringify(req.body)); });

    不要忘记阅读他们的github回购文件。

答案 1 :(得分:0)

express-formidable模块最适合将帖子数据发送到我认为的服务器。 使用以下命令npm install express-formidable安装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
});

您必须为此代码安装path模块才能使用以下命令npm install path在项目根目录中创建文件夹上传。与文件相关的所有数据都将在req.files中,而非文件数据将在req.fields中,我已将其与ejs模板引擎一起使用,它与{{1}一样好用}}。点击 This Link ,了解有关pug

的更多信息