简体   繁体   English

带有Post Method和enctype的表单Multipart / form-data不在Nodejs Express multer模块上提交

[英]Form with Post Method and enctype Multipart/form-data is not being submitted on Nodejs Express multer module

I am using : 我在用 :

"ejs": "^2.5.6",
"express": "^4.14.0",
"express-validator": "^3.2.0",
"multer": "^1.3.0",

My form is : 我的表格是:

     <form id="offer-form" role="form" enctype="multipart/form-data" action="/subfolder/86" method="POST">
    <input type="text" name="name"/>
    <input type="file" name="images"/>
<input type="file" name="images"/>
    <button type="submit">Submit</submit>
    </form>

My server route: 我的服务器路线:

var path = require('path');
var express = require('express');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');
var osmodule = require('../../osmodule');
var Multer = require('multer');
var request = require('request');
const multer = Multer({
    storage: Multer.memoryStorage(),
    limits: {
        fileSize: 5 * 1024 * 1024 // no larger than 5mb, you can change as needed.
    }
});


  //Adding a new subfolder
        app.post('/subfolder/:id', multer.array({ name: 'images', maxCount: 6 }), expressValidator, function (req, res, next) {
console.log("Form Submitted");
       }).use(function (req, res, next) {
    res.setHeader('Content-Type', 'text/plain');
    res.status(404).send('Not Found ! ');
    });

Normally this code should print on the console the message 通常,此代码应在控制台上显示以下消息

Form submitted but the server is receiving nothing not even Not Found 表单已提交,但服务器什么也没收到

I have just noticed the problem is with using multer and expressValidator. 我刚刚注意到问题在于使用multer和expressValidator。 If I remove expressValidator, it is working but if I add it, it is not working. 如果我删除expressValidator,则可以使用,但是如果添加它,则无法使用。 I need expressValidator to validate user data. 我需要expressValidator来验证用户数据。 Is there any other validator which will accept to be used with multer? 是否还有其他可以与multer一起使用的验证器?

I think this might be due to the validator not being initialize properly. 我认为这可能是由于验证程序未正确初始化。 Try the following by adding the following two lines before the app.post . 通过在app.post之前添加以下两行来尝试以下app.post

INIT 在里面

app.use(bodyParser.json()); //To enable post request over node api.
app.use(expressValidator([options])); // this line must be immediately after any of the bodyParser middlewares! 

Then you configure your validation inside the app.post 然后在app.post 内部配置验证

req.checkBody('postparam', 'Invalid postparam').notEmpty().isInt();

See all the available options 查看所有可用选项

Remember to remove expressValidator from the current app.post method above 请记住从上面的当前app.post方法中删除expressValidator

I found the solution of using both of these middlewares, I just called the before the action and called the express-validator after calling multer: 我找到了使用这两种中间件的解决方案,我只是在操作之前调用了操作,在调用multer之后调用了express-validator:

var path = require('path');
var express = require('express');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');
var osmodule = require('../../osmodule');
var Multer = require('multer');
var request = require('request');
const multer = Multer({
    storage: Multer.memoryStorage(),
    limits: {
        fileSize: 5 * 1024 * 1024 // no larger than 5mb, you can change as needed.
    }
});

app.get('/home',function(req,res){
console.log("Welcome Brother");
})
.use(multer.array({ name: 'images', maxCount: 6 });
.use(expressValidator);
.post('/subfolder/:id', function (req, res, next) {
console.log("Form Submitted");
       }).use(function (req, res, next) {
    res.setHeader('Content-Type', 'text/plain');
    res.status(404).send('Not Found ! ');
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将多部分/表单数据从 Angular 发布到 Nodejs Multer? - How to post multipart/form-data from Angular to Nodejs Multer? Node.js POST请求多部分/表单数据 - Nodejs POST request multipart/form-data enctype="multipart/form-data" 总是返回 null 输入,但它是 multer 必须工作的,我们如何解决这个问题? - enctype=“multipart/form-data” always return null input but it is a must for multer to work how can we fix this? NodeJS/Express:如何获取提交表单的编码类型? - NodeJS/Express: How to get enctype of submitted form? 在NodeJS中使用multipart / form-data进行POST - POST using multipart/form-data in NodeJS 当表单设置为 enctype='multipart/form-data' 时,express-validator 给出未定义的值 - express-validator giving undefined value when form set to enctype='multipart/form-data' 解析node.js Express应用程序,形式为enctype =“ multipart / form-data”销毁请求主体? - Parse node.js express app, form enctype=“multipart/form-data” destroys request body? 当enctype =“ multipart / form-data”(Node.js)时,无法读取Jade Form字段 - Unable to read a jade form field when it has enctype=“multipart/form-data” (Nodejs) Node.js Express-methodOverride无法用于多部分/表单数据 - Nodejs Express - methodOverride not working for multipart/form-data 使用 enctype=&quot;multipart/form-data&quot; 以 csrf 错误结束 - Using enctype="multipart/form-data" ends with csrf error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM