具有 Post 方法和编码类型 Multipart/form-data 的表单未在 Nodejs Express multer 模块上提交
Form with Post Method and enctype Multipart/form-data is not being submitted on Nodejs Express multer module
我正在使用:
"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 ! ');
});
通常此代码应在控制台上打印消息
Form submitted
but the server is receiving nothing not even
Not Found
我刚刚注意到问题出在使用 multer 和 expressValidator 上。如果我删除 expressValidator,它可以工作,但如果我添加它,它就不能工作。我需要 expressValidator 来验证用户数据。是否有任何其他验证器可以接受与 multer 一起使用?
我认为这可能是因为验证器没有正确初始化。
通过在 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
我找到了使用这两个中间件的解决方案,我只是在调用 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 ! ');
});
我正在使用:
"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 ! ');
});
通常此代码应在控制台上打印消息
Form submitted but the server is receiving nothing not even Not Found
我刚刚注意到问题出在使用 multer 和 expressValidator 上。如果我删除 expressValidator,它可以工作,但如果我添加它,它就不能工作。我需要 expressValidator 来验证用户数据。是否有任何其他验证器可以接受与 multer 一起使用?
我认为这可能是因为验证器没有正确初始化。
通过在 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
我找到了使用这两个中间件的解决方案,我只是在调用 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 ! ');
});