【问题标题】:Form with Post Method and enctype Multipart/form-data is not being submitted on Nodejs Express multer module带有 Post Method 和 enctype Multipart/form-data 的表单未在 Nodejs Express multer 模块上提交
【发布时间】:2017-10-04 19:33:27
【问题描述】:

我正在使用:

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

我的表格是:

     <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>

我的服务器路由:

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 ! ');
    });

通常此代码应在控制台上打印消息

提交的表单 但服务器甚至没有收到任何东西 未找到

我刚刚注意到问题在于使用 multer 和 expressValidator。如果我删除 expressValidator,它可以工作,但如果我添加它,它就不能工作。我需要 expressValidator 来验证用户数据。是否有任何其他验证器可以与 multer 一起使用?

【问题讨论】:

    标签: node.js forms express ejs multer


    【解决方案1】:

    我认为这可能是由于验证器没有正确初始化。 通过在app.post 之前添加以下两行来尝试以下操作。

    初始化

    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! 
    

    然后你在app.post

    内部配置你的验证
    req.checkBody('postparam', 'Invalid postparam').notEmpty().isInt();
    

    查看所有可用的options

    记得从上面的当前 app.post 方法中删除 expressValidator

    【讨论】:

    • 我把它放在帖子上是因为我希望它只用于该路线而不是一般的应用程序。如果我按照您要求的方式进行操作,则该应用程序通常会使用它@conrad Lotz
    【解决方案2】:

    我找到了使用这两个中间件的解决方案,我只是在操作之前调用了,在调用 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 ! ');
        });
    

    【讨论】:

      猜你喜欢
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 2011-08-05
      • 2016-04-02
      • 1970-01-01
      • 2014-10-27
      相关资源
      最近更新 更多