Javascript 使用expressjs的多部分表单数据发布方法

Javascript 使用expressjs的多部分表单数据发布方法,javascript,express,pug,multipartform-data,Javascript,Express,Pug,Multipartform Data,我试图将表单数据发布到我的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

我试图将表单数据发布到我的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-{}


如果我不使用
enctype=“multipart/form data”
发布,比如
form(action=“/profile”method=“post”)
,我可以从控制台结果中获取发布数据。

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

你可以在这里找到它:

要使用它:

  • 首先,使用npm安装将其添加到模块中——在根项目中保存multer
  • 然后将其导入.js文件
    var multer=require('multer')
  • 通过在
    multer
    构造函数中设置
    dest
    参数来选择上载目录:
    var upload=multer({dest:'uploads/')
  • 现在只需在POST函数中将其作为中间件传递,如下所示:
  • router.post('/',上传,函数(req,res){
    log('Body-'+JSON.stringify(req.Body));
    });


    别忘了阅读他们github repo的文档。

    express强大的
    模块最适合将post数据发送到服务器。 使用以下命令安装快速强大
    npm安装快速强大
    下面是一个示例代码示例

    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
    模板引擎一起使用过,并且与
    pug
    一样可以正常工作。单击了解有关
    express

    复制的更多信息,以了解Thank@Atef的可能复制,但这会将数据分割为req.file和req.body。请问有没有一种方法可以将所有的表单数据整合在一起。在req.body中,这样我就可以将数据按原样发送到另一个api。@Vixson我也遇到了同样的情况,我建议使用
    强大的
    ,因为它有一个更简单的处理程序,并且不分为req.file和req.body。它的大小也是multer的4倍,但仍然很轻