2017-05-06 77 views
1

我使用:形式POST方法和加密類型的multipart/form-data的未被的NodeJS快遞multer模塊上提交

"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來驗證用戶數據。是否有任何其他驗證工具可以接受與割絨師一起使用?

回答

1

我發現使用這兩種中間件的解決方案,我只是叫行動之前,並呼籲multer之後叫快遞,驗證:

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

我認爲這可能是由於驗證程序未正確初始化。 在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! 

然後配置你的驗證app.post

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

查看所有可用的options

請記住刪除expressValidator從目前app.post上述方法

+1

我把它放在帖子上,因爲我希望它僅用於該路線,而不是一般的應用程序。如果我按照你要求我這樣做的方式將它用於一般的@conrad Lotz應用程序 – aidonsnous