ExpressJS-带有文件上载多部分的表单导致req.body问题

ExpressJS-带有文件上载多部分的表单导致req.body问题,express,multipartform-data,multer,multer-s3,Express,Multipartform Data,Multer,Multer S3,我认为将enctype=“multipart/form data”表单类型与ExpressJS一起使用是一个常见问题。如果没有中间件,req.body(或bodyParser)无法处理此表单类型,因此我将在POST请求中为我的字段发送null值。我的表单有一个文件上传部分,这就是为什么我使用multipart,我使用multer和multer-s3模块来处理图像上传到s3存储桶的原因,但不确定如何使用multer或其他模块来帮助我将字段值存储到Mysql(Sequelize ORM)数据库。任何

我认为将
enctype=“multipart/form data”
表单类型与ExpressJS一起使用是一个常见问题。如果没有中间件,
req.body
(或bodyParser)无法处理此表单类型,因此我将在
POST
请求中为我的字段发送
null
值。我的表单有一个文件上传部分,这就是为什么我使用
multipart
,我使用
multer
multer-s3
模块来处理图像上传到s3存储桶的原因,但不确定如何使用
multer
或其他模块来帮助我将字段值存储到Mysql(Sequelize ORM)数据库。任何人能否提供指导,说明
multer
是否是用于此类表单上传的正确模块,并向我指出可以使用某些模块特定方法交换
req.body
的文档

我的表格是什么样子的

<form action="/app/post/create" method="post" enctype="multipart/form-data">
   <label for="discovery">Discovery:</label>
   <textarea id="discovery-text-field" name="discovery"></textarea>
   </br>
   <label for="report-link">Link to Report:</label>
   <input type="textarea" name="reportLink">
   <br />
   <label for="file-attachment">File Attachment:</label>
   <input type="file" id="file-input" name="fileUpload[]" multiple>
</form> 

我不确定您是否尝试使用AJAX发送数据,但我无法让AJAX以一种让Multer满意的方式正确发送多表单数据。以下是我对Express和Multer的使用。下面是一些JQuery,您可以使用它将表单值上传到服务器。然后,您可以操纵您的值,并将其存储在服务器端

<script language="JavaScript">
    $(document).ready(function () {
        $(".submitButton").click(function () {
            var values = {
                fields: $("#IDs").val()
            };
            var http = new XMLHttpRequest();
            http.open("POST", '/express/route', true);
            // stuff into a form
            var form = new FormData();
            form.append('values', JSON.stringify(values));
            // send data to server
            http.send(form);
        });
    });
</script>
现在您有了(我称之为单表单或非多表单)服务器端的值

目前我使用的是Mongo而不是SQL,所以这是我力所能及的。我相信您可以安装一些软件包(我会在npmjs.com上搜索sql),这些软件包将允许您与sql进行交互,但Mongo现在似乎在NodeJS中很流行。以下是我在构建平均堆栈时用于参考的链接:
如果您有Visual Studio,并且希望将NPM内置到VS中,那么这也很有用。

我不确定您是否尝试使用AJAX发送数据,但我无法让AJAX以使Multer满意的方式正确发送多表单数据。以下是我对Express和Multer的使用。下面是一些JQuery,您可以使用它将表单值上传到服务器。然后,您可以操纵您的值,并将其存储在服务器端

<script language="JavaScript">
    $(document).ready(function () {
        $(".submitButton").click(function () {
            var values = {
                fields: $("#IDs").val()
            };
            var http = new XMLHttpRequest();
            http.open("POST", '/express/route', true);
            // stuff into a form
            var form = new FormData();
            form.append('values', JSON.stringify(values));
            // send data to server
            http.send(form);
        });
    });
</script>
现在您有了(我称之为单表单或非多表单)服务器端的值

目前我使用的是Mongo而不是SQL,所以这是我力所能及的。我相信您可以安装一些软件包(我会在npmjs.com上搜索sql),这些软件包将允许您与sql进行交互,但Mongo现在似乎在NodeJS中很流行。以下是我在构建平均堆栈时用于参考的链接: 如果您有VisualStudio并且希望将NPM内置到VS中,那么它也很有用

app.post('/express/route', upload.array(), function (req, res, next) {
    console.log(req.body);
}